Beispiel #1
0
	def io(self, dictEelement):
		#在数据工厂里面对protobuf格式数据,进行如下操作
		datagramfactory = _dsb.DatagramStringBuffer()
		# 1.序列化
		datagramfactory.strbuffer = dictEelement['requestMsg'].SerializeToString()

		if not datagramfactory.strbuffer:
			dictEelement['strErrMsg'] = 'requestMsg.SerializeToString failed'
			return -1
		# 2.编码(转网络字节序) bytebuf是class ByteBuffer对象,包含一个list
		bytebuf = datagramfactory.encode()

		# 3.list转string
		requestByte = ''.join(bytebuf.bytelist)

		# 4.字典类型,用于传参
		dictByte = {'requestByte':requestByte, 'responseByte':None, 'strErrMsg':None}

		ret = self.tcp_io(dictByte)
		if ret != 0:
			dictEelement['strErrMsg'] = dictByte['strErrMsg']
			return -1		
		
		# 5.解码
		protoStrResponse = datagramfactory.decode(dictByte['responseByte'])

		stResponseMsg = _msg.Msg()
		# 6.反序列化 string -> protobuf
		stResponseMsg.ParseFromString(protoStrResponse)

		dictEelement['responseMsg'] = stResponseMsg
		return 0
def FetchFeedsInfo(listFeedId, iPaAppidMd5, iOpenidMd5):
    # 1.Build requestMsg protobuf
    stFeedDetailRequestMsg = _msg.Msg()

    stFeedDetailRequestMsgHead = stFeedDetailRequestMsg.head
    stFeedDetailRequestMsgHead.cmd = _msg.QUERY_FEED_DETAIL_REQ
    stFeedDetailRequestMsgHead.seq = int(time.time())

    stQueryFeedDetailReq = stFeedDetailRequestMsg.query_feed_detail_req
    stQueryFeedDetailReq.pa_appid_md5 = iPaAppidMd5
    stQueryFeedDetailReq.openid_md5 = iOpenidMd5

    for feedId in listFeedId:
        stQueryFeedDetailReq.feed_id_list.append(feedId)

    # 2.Send to server, and recv responseMsg protobuf
    ioclient = _tcp_client.ProtoIOTcpClient(feedServerIP, feedServerPort)
    dictMsg = {
        'requestMsg': stFeedDetailRequestMsg,
        'responseMsg': None,
        'strErrMsg': None
    }

    ret = ioclient.io(dictMsg)

    if ret != 0:
        logger.error('FetchFeedsInfo IO failed, errmsg = %s',
                     dictMsg['strErrMsg'])
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return -1

    stFeedDetailResponseMsg = dictMsg['responseMsg']
    logger.debug('responseMsg: \n %s', stFeedDetailResponseMsg)

    if stFeedDetailResponseMsg.head.cmd != _msg.QUERY_FEED_DETAIL_RES:
        logger.error('FetchFeedsInfo response.head.cmd=%d, unkown, f**k!!!',
                     stFeedDetailResponseMsg.head.cmd)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return -1

    if stFeedDetailResponseMsg.head.result != _msg.E_OK:
        logger.error('FetchFeedsInfo response.head.result=%d, not E_OK!',
                     stFeedDetailResponseMsg.head.result)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return -1

    # 3.Parse
    listFeedId = []  #clear
    res = stFeedDetailResponseMsg.query_feed_detail_res
    dictFeedInfo = {}
    for i in range(len(res.feed_list)):
        stFeedInfo = res.feed_list[i]
        listFeedId.append(stFeedInfo.feed_id)

        dictFeedInfo[str(stFeedInfo.feed_id)] = FeedInfoPB2Dict(stFeedInfo)

    if len(dictFeedInfo) > 0:
        mycgi.addBody('feed_info', dictFeedInfo)

    return 0
def InnerProcess():
    # 1.Get HTTP params
    openid_md5 = int(mycgi.getEnvValue('openid_md5', 0))

    # 2.Params check
    if 0 == openid_md5:
        logger.error('INVALID PARAM!')
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_INVALID_PARAM)
        return True

    # 3.Build requestMsg protobuf
    stRequestMsg = _msg.Msg()

    stRequestMsgHeader = stRequestMsg.head
    stRequestMsgHeader.cmd = _msg.QUERY_MSG_NEWMSG_STATUS_REQ
    stRequestMsgHeader.seq = int(time.time())

    stRequestMsgBody = stRequestMsg.msg_query_newmsg_status_req
    stRequestMsgBody.openid_md5 = openid_md5

    logger.debug('requestMsg: \n %s', stRequestMsg)

    # 4.Send to server, and recv responseMsg protobuf
    ioclient = _tcp_client.ProtoIOTcpClient(msgServerIP, msgServerPort)

    dictMsg = {
        'requestMsg': stRequestMsg,
        'responseMsg': None,
        'strErrMsg': None
    }

    ret = ioclient.io(dictMsg)

    if ret != 0:
        logger.error('ProtoIOTcpClient IO failed, errmsg = %s',
                     dictMsg['strErrMsg'])
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    stResponseMsg = dictMsg['responseMsg']
    logger.debug('responseMsg: \n %s', stResponseMsg)

    if stResponseMsg.head.cmd != _msg.QUERY_MSG_NEWMSG_STATUS_RES:
        logger.error('response.head.cmd=%d, unkown, f**k!!!',
                     stResponseMsg.head.cmd)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    if stResponseMsg.head.result != _msg.E_OK:
        logger.error('response.head.result=%d, not E_OK!',
                     stResponseMsg.head.result)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    # 5.protobuf -> json, and do reply
    stMsgQueryRes = stResponseMsg.msg_query_newmsg_status_res
    mycgi.addBody('newmsg_status', stMsgQueryRes.newmsg_status)

    mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_OK)
    return True
def InnerProcess():
	# 1.Get HTTP params	
	openid_md5 = int(mycgi.getEnvValue('openid_md5', 0))
	pa_appid_md5 = int(mycgi.getEnvValue('pa_appid_md5', 0))
	iType = int(mycgi.getEnvValue('type', 0))
	opt = int(mycgi.getEnvValue('opt', 0))
	
	# 2.Params check
	if 0 == openid_md5 or 0 == pa_appid_md5 or (iType < 1 or iType > 4) or (opt < 0 or opt > 2):
		logger.error('INVALID PARAM: openid_md5=%d, pa_appid_md5=%d, type=%d, opt=%d!', openid_md5, pa_appid_md5, iType, opt)
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_INVALID_PARAM)		
		return True

	# 3.Build requestMsg protobuf
	stRequestMsg = _msg.Msg()

	stRequestMsgHeader = stRequestMsg.head
	stRequestMsgHeader.cmd = _msg.UPDATE_SYSTEM_RED_POINT_REQ
	stRequestMsgHeader.seq = int(time.time())

	stRequestMsgBody = stRequestMsg.update_system_red_point_req
	stRequestMsgBody.openid_md5 = openid_md5
	stRequestMsgBody.pa_appid_md5 = pa_appid_md5
	stRequestMsgBody.type = iType
	stRequestMsgBody.opt = opt

	logger.debug('requestMsg: \n %s', stRequestMsg)

	# 4.Send to server, and recv responseMsg protobuf	
	ioclient = _tcp_client.ProtoIOTcpClient(msgServerIP, msgServerPort)

	dictMsg = {'requestMsg':stRequestMsg, 'responseMsg':None, 'strErrMsg':None}

	ret = ioclient.io(dictMsg)

	if ret != 0:	
		logger.error('ProtoIOTcpClient IO failed, errmsg = %s', dictMsg['strErrMsg'])
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)		
		return True

	stResponseMsg = dictMsg['responseMsg']
	logger.debug('responseMsg: \n %s', stResponseMsg)

	if stResponseMsg.head.cmd != _msg.UPDATE_SYSTEM_RED_POINT_RES:
		logger.error('response.head.cmd=%d, unkown, f**k!!!', stResponseMsg.head.cmd)
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)		
		return True

	if stResponseMsg.head.result != _msg.E_OK:
		logger.error('response.head.result=%d, not E_OK!', stResponseMsg.head.result)
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)		
		return True

	# 5.protobuf -> json, and do reply
	
	mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_OK)
	return True
def FetchUserInfo(listOpenidMd5):
    # 1.Build requestMsg protobuf
    stUserInfoRequestMsg = _msg.Msg()

    stUserInfoRequestMsgHead = stUserInfoRequestMsg.head
    stUserInfoRequestMsgHead.cmd = _msg.QUERY_USER_DETAIL_INFO_REQ
    stUserInfoRequestMsgHead.seq = int(time.time())

    stQueryUserDetailInfoReq = stUserInfoRequestMsg.query_user_detail_info_req
    for openidMd5 in listOpenidMd5:
        stQueryUserDetailInfoReq.openid_md5_list.append(openidMd5)

    # 2.Send to server, and recv responseMsg protobuf
    ioclient = _tcp_client.ProtoIOTcpClient(userServerIP, userServerPort)
    dictMsg = {
        'requestMsg': stUserInfoRequestMsg,
        'responseMsg': None,
        'strErrMsg': None
    }

    ret = ioclient.io(dictMsg)

    if ret != 0:
        logger.error('FetchFeedsInfo IO failed, errmsg = %s',
                     dictMsg['strErrMsg'])
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return -1

    stUserInfoResponseMsg = dictMsg['responseMsg']
    logger.debug('responseMsg: \n %s', stUserInfoResponseMsg)

    if stUserInfoResponseMsg.head.cmd != _msg.QUERY_USER_DETAIL_INFO_RES:
        logger.error('FetchUserInfo response.head.cmd=%d, unkown, f**k!!!',
                     stUserInfoResponseMsg.head.cmd)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return -1

    if stUserInfoResponseMsg.head.result != _msg.E_OK:
        logger.error('FetchUserInfo response.head.result=%d, not E_OK!',
                     stUserInfoResponseMsg.head.result)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return -1

    # 3.Parse
    listOpenidMd5 = []  #clear
    res = stUserInfoResponseMsg.query_user_detail_info_res
    dictUserInfo = {}
    for i in range(len(res.user_detail_info_list)):
        stUserInfo = res.user_detail_info_list[i]
        listOpenidMd5.append(stUserInfo.openid_md5)

        dictUserInfo[str(stUserInfo.openid_md5)] = UserInfoPB2Dict(stUserInfo)

    if len(dictUserInfo) > 0:
        mycgi.addBody('user_info', dictUserInfo)

    return 0
Beispiel #6
0
def InnerProcess():
    # 1.Get HTTP params
    #'''
    strMsgContent = mycgi.getEnvValue('content', '')
    openid_md5_from = int(mycgi.getEnvValue('openid_md5_from', 0))
    openid_md5_to = int(mycgi.getEnvValue('openid_md5_to', 0))

    # for test
    '''
	strMsgContent = '你好!world'
	openid_md5_from = 123
	openid_md5_to = 456
	'''

    # 2.Params check
    if strMsgContent == '' or openid_md5_from == 0 or openid_md5_to == 0:
        logger.error('INVALID PARAM!')
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_INVALID_PARAM)
        return True

    # 3.Build requestMsg protobuf
    stRequestMsg = _msg.Msg()

    stRequestMsgHeader = stRequestMsg.head
    stRequestMsgHeader.cmd = _msg.ADD_MSG_REQ
    stRequestMsgHeader.seq = int(time.time())

    stRequestMsgBody = stRequestMsg.msg_add_req
    msgcontent = stRequestMsgBody.msg_content
    msgcontent.content = strMsgContent.decode('utf-8')
    msgcontent.openid_md5_from = openid_md5_from
    msgcontent.openid_md5_to = openid_md5_to

    logger.debug('requestMsg: \n %s', stRequestMsg)

    # 4.Send to server, and recv responseMsg protobuf
    ioclient = _tcp_client.ProtoIOTcpClient(msgServerIP, msgServerPort)

    dictMsg = {
        'requestMsg': stRequestMsg,
        'responseMsg': None,
        'strErrMsg': None
    }

    ret = ioclient.io(dictMsg)

    if ret != 0:
        logger.error('ProtoIOTcpClient IO failed, errmsg = %s',
                     dictMsg['strErrMsg'])
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    stResponseMsg = dictMsg['responseMsg']
    logger.debug('responseMsg: \n %s', stResponseMsg)

    if stResponseMsg.head.cmd != _msg.ADD_MSG_RES:
        logger.error('response.head.cmd=%d, unkown, f**k!!!',
                     stResponseMsg.head.cmd)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    if stResponseMsg.head.result != _msg.E_OK:
        logger.error('response.head.result=%d, not E_OK!',
                     stResponseMsg.head.result)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    # 5.protobuf -> json, and do reply
    msg_id = stResponseMsg.msg_add_res.msg_id
    create_ts = stResponseMsg.msg_add_res.create_ts

    mycgi.addBody('msg_id', msg_id)
    mycgi.addBody('create_ts', create_ts)

    mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_OK)
    return True
def InnerProcess():
	# 1.Get HTTP params
	openid_md5 = int(mycgi.getEnvValue('openid_md5', 0))

	# 2.Params check
	if 0 == openid_md5:
		logger.error('INVALID PARAM!')
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_INVALID_PARAM)		
		return True

	# 3.Build requestMsg protobuf
	stRequestMsg = _msg.Msg()

	stRequestMsgHeader = stRequestMsg.head
	stRequestMsgHeader.cmd = _msg.QUERY_MSG_SESSION_LIST_REQ
	stRequestMsgHeader.seq = int(time.time())

	stRequestMsgBody = stRequestMsg.msg_query_session_list_req
	stRequestMsgBody.openid_md5 = openid_md5

	logger.debug('requestMsg: \n %s', stRequestMsg)

	# 4.Send to server, and recv responseMsg protobuf	
	ioclient = _tcp_client.ProtoIOTcpClient(msgServerIP, msgServerPort)

	dictMsg = {'requestMsg':stRequestMsg, 'responseMsg':None, 'strErrMsg':None}

	ret = ioclient.io(dictMsg)

	if ret != 0:	
		logger.error('ProtoIOTcpClient IO failed, errmsg = %s', dictMsg['strErrMsg'])
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)		
		return True

	stResponseMsg = dictMsg['responseMsg']
	logger.debug('responseMsg: \n %s', stResponseMsg)

	if stResponseMsg.head.cmd != _msg.QUERY_MSG_SESSION_LIST_RES:
		logger.error('response.head.cmd=%d, unkown, f**k!!!', stResponseMsg.head.cmd)
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)		
		return True

	if stResponseMsg.head.result != _msg.E_OK:
		logger.error('response.head.result=%d, not E_OK!', stResponseMsg.head.result)
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)		
		return True

	# 5.Get UserInfo
	listOpenidMd5 = []
	listOpenidMd5.append(openid_md5)
	stMsgQueryRes = stResponseMsg.msg_query_session_list_res
	for session in stMsgQueryRes.session:
		if openid_md5 == session.openid_md5_from:
			listOpenidMd5.append(session.openid_md5_to)
		else:
			listOpenidMd5.append(session.openid_md5_from)

	pbUserInfoList = []
	if FetchUserInfo(listOpenidMd5, pbUserInfoList) < 0:
		logger.error('FetchUserInfo failed!!!')
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
		return True

	stHostUserInfo = UserInfoPB2Dict(pbUserInfoList[0])

	session_list = []
	for i in range(len(stMsgQueryRes.session))[::-1]:
		tSession = stMsgQueryRes.session[i]
		flag = False

		for j in range(len(pbUserInfoList))[::-1]:
			stGuestUserInfo = None
			tUserInfo = pbUserInfoList[j]
			if openid_md5 == tSession.openid_md5_from:
				if tUserInfo.openid_md5 == tSession.openid_md5_to:
					continue
				else:
					stGuestUserInfo = UserInfoPB2Dict(tUserInfo)
					flag = True
					break
			elif openid_md5 == tSession.openid_md5_to:
				if tUserInfo.openid_md5 == tSession.openid_md5_from:
					continue
				else:
					stGuestUserInfo = UserInfoPB2Dict(tUserInfo)
					flag = True
					break

		if flag is not True:
			continue

		dictItem = {}
		dictItem['openid_md5_from'] = str(tSession.openid_md5_from)
		dictItem['openid_md5_to'] = str(tSession.openid_md5_to)

		if openid_md5 == tSession.openid_md5_from:
			dictItem['userinfo_from'] = stHostUserInfo
			dictItem['userinfo_to'] = stGuestUserInfo
		else:
			dictItem['userinfo_from'] = stGuestUserInfo
			dictItem['userinfo_to'] = stHostUserInfo

		dictItem['content'] = tSession.content
		dictItem['create_ts'] = str(tSession.create_ts)
		dictItem['newmsg_status'] = tSession.newmsg_status

		session_list.append(dictItem)

	mycgi.addBody('session_list', session_list)

	mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_OK)
	return True
Beispiel #8
0
def InnerProcess():
    # 1.Get HTTP params
    msg_id = int(mycgi.getEnvValue('msg_id', 0))
    amount = int(mycgi.getEnvValue('amount', 0))
    openid_md5_from = int(mycgi.getEnvValue('openid_md5_from', 0))
    openid_md5_to = int(mycgi.getEnvValue('openid_md5_to', 0))

    # 2.Params check
    if 0 == openid_md5_from or 0 == openid_md5_to:
        logger.error(
            'INVALID OPENID MD5! openid_md5_from = %d, openid_md5_to = %d',
            openid_md5_from, openid_md5_to)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_INVALID_PARAM)
        return True
    if amount > getMsgAmountLimit:
        logger.error('amount: %d > getMsgAmountLimit: %d', amount,
                     getMsgAmountLimit)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_INVALID_PARAM)
        return True

    # 3.Build requestMsg protobuf
    stRequestMsg = _msg.Msg()

    stRequestMsgHeader = stRequestMsg.head
    stRequestMsgHeader.cmd = _msg.QUERY_MSG_REQ
    stRequestMsgHeader.seq = int(time.time())

    stRequestMsgBody = stRequestMsg.msg_query_req
    stRequestMsgBody.msg_id = msg_id
    stRequestMsgBody.amount = amount
    stRequestMsgBody.openid_md5_from = openid_md5_from
    stRequestMsgBody.openid_md5_to = openid_md5_to

    logger.debug('requestMsg: \n %s', stRequestMsg)

    # 4.Send to server, and recv responseMsg protobuf
    ioclient = _tcp_client.ProtoIOTcpClient(msgServerIP, msgServerPort)

    dictMsg = {
        'requestMsg': stRequestMsg,
        'responseMsg': None,
        'strErrMsg': None
    }

    ret = ioclient.io(dictMsg)

    if ret != 0:
        logger.error('ProtoIOTcpClient IO failed, errmsg = %s',
                     dictMsg['strErrMsg'])
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    stResponseMsg = dictMsg['responseMsg']
    logger.debug('responseMsg: \n %s', stResponseMsg)

    if stResponseMsg.head.cmd != _msg.QUERY_MSG_RES:
        logger.error('response.head.cmd=%d, unkown, f**k!!!',
                     stResponseMsg.head.cmd)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    if stResponseMsg.head.result != _msg.E_OK:
        logger.error('response.head.result=%d, not E_OK!',
                     stResponseMsg.head.result)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    # 5.protobuf -> json, and do reply
    strMsgQueryRes = stResponseMsg.msg_query_res
    msgContentList = []
    preTime = 0
    for i in range(len(strMsgQueryRes.msg_content)):
        dictItem = {}
        msgContent = strMsgQueryRes.msg_content[i]
        dictItem['id'] = str(msgContent.id)
        dictItem['content'] = msgContent.content
        dictItem['openid_md5_from'] = str(msgContent.openid_md5_from)
        dictItem['openid_md5_to'] = str(msgContent.openid_md5_to)

        if i == 0:
            dictItem['create_ts'] = str(msgContent.create_ts)
        else:
            if msgContent.create_ts - preTime >= interval:
                dictItem['create_ts'] = str(msgContent.create_ts)
            else:
                dictItem['create_ts'] = '0'

        preTime = msgContent.create_ts

        msgContentList.append(dictItem)

    # 6.Get UserInfo
    listOpenidMd5 = []
    listOpenidMd5.append(openid_md5_from)
    listOpenidMd5.append(openid_md5_to)
    if FetchUserInfo(listOpenidMd5) < 0:
        logger.error('FetchUserInfo failed!!!')
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    # 7.Reply
    mycgi.addBody('msg_content_list', msgContentList)
    mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_OK)
    return True
def InnerProcess():
	# 1.Get HTTP params	
	openid_md5 = int(mycgi.getEnvValue('openid_md5', 0))
	pa_appid_md5 = int(mycgi.getEnvValue('pa_appid_md5', 0))
	
	# 2.Params check
	if 0 == openid_md5 or 0 == pa_appid_md5:
		logger.error('INVALID PARAM: openid_md5=%d, pa_appid_md5=%d!', openid_md5, pa_appid_md5)
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_INVALID_PARAM)		
		return True

	# 3.Build requestMsg protobuf
	stRequestMsg = _msg.Msg()

	stRequestMsgHeader = stRequestMsg.head
	stRequestMsgHeader.cmd = _msg.QUERY_SYSTEM_RED_POINT_REQ
	stRequestMsgHeader.seq = int(time.time())

	stRequestMsgBody = stRequestMsg.query_system_red_point_req
	stRequestMsgBody.openid_md5 = openid_md5
	stRequestMsgBody.pa_appid_md5 = pa_appid_md5

	logger.debug('requestMsg: \n %s', stRequestMsg)

	# 4.Send to server, and recv responseMsg protobuf	
	ioclient = _tcp_client.ProtoIOTcpClient(msgServerIP, msgServerPort)

	dictMsg = {'requestMsg':stRequestMsg, 'responseMsg':None, 'strErrMsg':None}

	ret = ioclient.io(dictMsg)

	if ret != 0:	
		logger.error('ProtoIOTcpClient IO failed, errmsg = %s', dictMsg['strErrMsg'])
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)		
		return True

	stResponseMsg = dictMsg['responseMsg']
	logger.debug('responseMsg: \n %s', stResponseMsg)

	if stResponseMsg.head.cmd != _msg.QUERY_SYSTEM_RED_POINT_RES:
		logger.error('response.head.cmd=%d, unkown, f**k!!!', stResponseMsg.head.cmd)
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)		
		return True

	if stResponseMsg.head.result != _msg.E_OK:
		logger.error('response.head.result=%d, not E_OK!', stResponseMsg.head.result)
		mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)		
		return True

	# 5.protobuf -> json, and do reply
	# init RED POINT LIST
	redinfo_list = {}
	for i in range(1, 6):
		redinfo_list[str(i)] = 0

	stMsgQueryRes = stResponseMsg.query_system_red_point_res
	for msg in stMsgQueryRes.red_point_info:
		redinfo_list[str(msg.type)] = msg.value
	
	mycgi.addBody('redinfo_list', redinfo_list)
	mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_OK)
	return True
def InnerProcess():
    # 1.Get HTTP params
    openid_md5 = int(mycgi.getEnvValue('openid_md5', 0))
    pa_appid_md5 = int(mycgi.getEnvValue('pa_appid_md5', 0))
    begin_ts = int(mycgi.getEnvValue('begin_ts', 0))
    limit = int(mycgi.getEnvValue('limit', 0))

    # 2.Params check
    if 0 == openid_md5 or 0 == pa_appid_md5 or (limit <= 0 or limit >= 100):
        logger.error(
            'INVALID PARAM: openid_md5=%d, pa_appid_md5=%d, limit=%d !',
            openid_md5, pa_appid_md5, limit)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_INVALID_PARAM)
        return True

    # 3.Build requestMsg protobuf
    stRequestMsg = _msg.Msg()

    stRequestMsgHeader = stRequestMsg.head
    stRequestMsgHeader.cmd = _msg.QUERY_SYSTEM_MSG_REQ
    stRequestMsgHeader.seq = int(time.time())

    stRequestMsgBody = stRequestMsg.system_msg_query_req
    stRequestMsgBody.openid_md5 = openid_md5
    stRequestMsgBody.pa_appid_md5 = pa_appid_md5
    stRequestMsgBody.begin_ts = begin_ts
    stRequestMsgBody.limit = limit

    logger.debug('requestMsg: \n %s', stRequestMsg)

    # 4.Send to server, and recv responseMsg protobuf
    ioclient = _tcp_client.ProtoIOTcpClient(msgServerIP, msgServerPort)

    dictMsg = {
        'requestMsg': stRequestMsg,
        'responseMsg': None,
        'strErrMsg': None
    }

    ret = ioclient.io(dictMsg)

    if ret != 0:
        logger.error('ProtoIOTcpClient IO failed, errmsg = %s',
                     dictMsg['strErrMsg'])
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    stResponseMsg = dictMsg['responseMsg']
    logger.debug('responseMsg: \n %s', stResponseMsg)

    if stResponseMsg.head.cmd != _msg.QUERY_SYSTEM_MSG_RES:
        logger.error('response.head.cmd=%d, unkown, f**k!!!',
                     stResponseMsg.head.cmd)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    if stResponseMsg.head.result != _msg.E_OK:
        logger.error('response.head.result=%d, not E_OK!',
                     stResponseMsg.head.result)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    # 5.protobuf -> json, and do reply
    stMsgQueryRes = stResponseMsg.system_msg_query_res
    system_msg_list = []
    for systemMsg in stMsgQueryRes.system_msg_list:
        dictItem = {}
        dictItem['pa_appid_md5'] = systemMsg.pa_appid_md5
        dictItem['create_ts'] = systemMsg.create_ts
        dictItem['title'] = systemMsg.title
        dictItem['content'] = systemMsg.content
        system_msg_list.append(dictItem)

    mycgi.addBody('system_msg_list', system_msg_list)
    mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_OK)
    return True
def InnerProcess():
    # 1.Get HTTP params
    # string -> uint64_t, long or int? however both test OK!
    # "python 自带大数整数运算,整数不会溢出,只要内存足够, 3.x后不再区分int/long,去除了long,统称int"
    #'''
    pa_appid_md5 = int(mycgi.getEnvValue('pa_appid_md5', 0))
    openid_md5 = int(mycgi.getEnvValue('openid_md5', 0))
    iType = int(mycgi.getEnvValue('type', 0))
    limit_ts = int(mycgi.getEnvValue('limit_ts', 0))
    pagesize = int(mycgi.getEnvValue('pagesize', 0))
    '''
	pa_appid_md5 = 6353185739184837437
	openid_md5 = 8363909989775180263
	iType = 2
	limit_ts = 0
	pagesize = 10
	'''

    # 2.Params check
    if pa_appid_md5 == 0 or openid_md5 == 0:
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_INVALID_PARAM)
        logger.error('invalid pa_appid_md5=%d, or openid_md5=%d', pa_appid_md5,
                     openid_md5)
        return True

    if iType < 1 or iType > 3:
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_INVALID_PARAM)
        logger.error('invalid type=%d', iType)
        return True

    # 3.Build requestMsg protobuf
    stRequestMsg = _msg.Msg()

    stRequestMsgHeader = stRequestMsg.head
    stRequestMsgHeader.cmd = _msg.QUERY_NOTICE_RECORD_REQ
    stRequestMsgHeader.seq = int(time.time())

    stRequestMsgBody = stRequestMsg.notice_record_query_req
    stRequestMsgBody.pa_appid_md5 = pa_appid_md5
    stRequestMsgBody.openid_md5 = openid_md5
    stRequestMsgBody.type = iType
    stRequestMsgBody.limit_ts = limit_ts
    stRequestMsgBody.pagesize = pagesize

    logger.debug('requestMsg: \n %s', stRequestMsg)

    # 4.Send to server, and recv responseMsg protobuf
    ioclient = _tcp_client.ProtoIOTcpClient(msgServerIP, msgServerPort)

    dictMsg = {
        'requestMsg': stRequestMsg,
        'responseMsg': None,
        'strErrMsg': None
    }

    ret = ioclient.io(dictMsg)

    if ret != 0:
        logger.error('ProtoIOTcpClient IO failed, errmsg = %s',
                     dictMsg['strErrMsg'])
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    stResponseMsg = dictMsg['responseMsg']
    logger.debug('responseMsg: \n %s', stResponseMsg)

    if stResponseMsg.head.cmd != _msg.QUERY_NOTICE_RECORD_RES:
        logger.error('response.head.cmd=%d, unkown, f**k!!!',
                     stResponseMsg.head.cmd)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    if stResponseMsg.head.result != _msg.E_OK:
        logger.error('response.head.result=%d, not E_OK!',
                     stResponseMsg.head.result)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return True

    # 5.protobuf -> json, and do reply
    if iType == _comm_enum.NOTICE_RECORD_TYPE_COMMENT:
        listFollowId = []
        res = stResponseMsg.notice_record_query_res
        for i in range(len(res.notice_record_list)):
            listFollowId.append(int(res.notice_record_list[i].extra_data_2))

        #Get CommentInfo
        if FetchCommentInfo(listFollowId, pa_appid_md5, openid_md5) < 0:
            logger.error('FetchCommentInfo failed!')
            return True

        #Gen notice record list
        for i in range(len(res.notice_record_list)):
            tmp_follow_id = int(res.notice_record_list[i].extra_data_2)
            if tmp_follow_id not in listFollowId:
                continue
            dictNoticeRecord = {}
            dictNoticeRecord['pa_appid_md5'] = str(
                res.notice_record_list[i].pa_appid_md5)
            dictNoticeRecord['openid_md5'] = str(
                res.notice_record_list[i].openid_md5)
            dictNoticeRecord['create_ts'] = str(
                res.notice_record_list[i].create_ts)
            dictNoticeRecord['type'] = res.notice_record_list[i].type
            dictNoticeRecord['status'] = res.notice_record_list[i].status
            dictNoticeRecord['extra_data_0'] = res.notice_record_list[
                i].extra_data_0
            dictNoticeRecord['extra_data_1'] = res.notice_record_list[
                i].extra_data_1
            dictNoticeRecord['extra_data_2'] = res.notice_record_list[
                i].extra_data_2

            mycgi.addBody('notice_record_list', dictNoticeRecord)

    elif iType == _comm_enum.NOTICE_RECORD_TYPE_FAVORITE:
        listFeedId = []
        listOpenidMd5 = []
        res = stResponseMsg.notice_record_query_res
        for i in range(len(res.notice_record_list)):
            listFeedId.append(int(res.notice_record_list[i].extra_data_0))
            listOpenidMd5.append(int(res.notice_record_list[i].extra_data_1))

        #Get FeedInfo
        if FetchFeedsInfo(listFeedId, pa_appid_md5, openid_md5) < 0:
            logger.error('FetchFeedsInfo failed!')
            return True

        #Get UserInfo
        if FetchUserInfo(listOpenidMd5) < 0:
            logger.error('FetchUserInfo failed!')
            return True

        #Gen notice record list
        for i in range(len(res.notice_record_list)):
            tmp_feed_id = int(res.notice_record_list[i].extra_data_0)
            tmp_openid_md5 = int(res.notice_record_list[i].extra_data_1)

            if tmp_feed_id not in listFeedId or tmp_openid_md5 not in listOpenidMd5:
                continue
            dictNoticeRecord = {}
            dictNoticeRecord['pa_appid_md5'] = str(
                res.notice_record_list[i].pa_appid_md5)
            dictNoticeRecord['openid_md5'] = str(
                res.notice_record_list[i].openid_md5)
            dictNoticeRecord['create_ts'] = str(
                res.notice_record_list[i].create_ts)
            dictNoticeRecord['type'] = res.notice_record_list[i].type
            dictNoticeRecord['status'] = res.notice_record_list[i].status
            dictNoticeRecord['extra_data_0'] = res.notice_record_list[
                i].extra_data_0
            dictNoticeRecord['extra_data_1'] = res.notice_record_list[
                i].extra_data_1
            dictNoticeRecord['extra_data_2'] = res.notice_record_list[
                i].extra_data_2

            mycgi.addBody('notice_record_list', dictNoticeRecord)

    elif iType == _comm_enum.NOTICE_RECORD_TYPE_SYSTEM_MSG:
        res = stResponseMsg.notice_record_query_res
        for i in range(len(res.notice_record_list)):
            dictNoticeRecord = {}
            dictNoticeRecord['pa_appid_md5'] = str(
                res.notice_record_list[i].pa_appid_md5)
            dictNoticeRecord['openid_md5'] = str(
                res.notice_record_list[i].openid_md5)
            dictNoticeRecord['create_ts'] = str(
                res.notice_record_list[i].create_ts)
            dictNoticeRecord['type'] = res.notice_record_list[i].type
            dictNoticeRecord['status'] = res.notice_record_list[i].status
            dictNoticeRecord['extra_data_0'] = res.notice_record_list[
                i].extra_data_0
            dictNoticeRecord['extra_data_1'] = res.notice_record_list[
                i].extra_data_1
            dictNoticeRecord['extra_data_2'] = res.notice_record_list[
                i].extra_data_2

            mycgi.addBody('notice_record_list', dictNoticeRecord)

    mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_OK)
    return True
def FetchCommentInfo(listFollowId, iPaAppidMd5, iOpenidMd5):
    # 1.Build requestMsg protobuf
    stRequestMsg = _msg.Msg()

    stRequestMsgHead = stRequestMsg.head
    stRequestMsgHead.cmd = _msg.QUERY_FOLLOW_DETAIL_REQ
    stRequestMsgHead.seq = int(time.time())

    stRequestMsgBody = stRequestMsg.query_follow_detail_req
    stRequestMsgBody.pa_appid_md5 = iPaAppidMd5
    stRequestMsgBody.openid_md5 = iOpenidMd5
    for followid in listFollowId:
        stRequestMsgBody.follow_id_list.append(followid)

    # 2.Send to server, and recv responseMsg protobuf
    ioclient = _tcp_client.ProtoIOTcpClient(feedServerIP, feedServerPort)
    dictMsg = {
        'requestMsg': stRequestMsg,
        'responseMsg': None,
        'strErrMsg': None
    }

    ret = ioclient.io(dictMsg)

    if ret != 0:
        logger.error('FetchCommentInfo IO failed, errmsg = %s',
                     dictMsg['strErrMsg'])
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return -1

    stResponseMsg = dictMsg['responseMsg']
    logger.debug('responseMsg: \n %s', stResponseMsg)

    if stResponseMsg.head.cmd != _msg.QUERY_FOLLOW_DETAIL_RES:
        logger.error('FetchCommentInfo response.head.cmd=%d, unkown, f**k!!!',
                     stResponseMsg.head.cmd)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return -1

    if stResponseMsg.head.result != _msg.E_OK:
        logger.error('FetchCommentInfo response.head.result=%d, not E_OK!',
                     stResponseMsg.head.result)
        mycgi.DoReply(CGI_RET_CODE.CGI_RET_CODE_SERVER_BUSY)
        return -1

    # 3.Parse
    listOpenidMd5 = []
    listFeedId = []
    stResponseMsgBody = stResponseMsg.query_follow_detail_res
    for follower in stResponseMsgBody.follow_list:
        listOpenidMd5.append(follower.openid_md5_from)
        listFeedId.append(follower.feed_id)
    # list去重
    # listOpenidMd5 = list(set(listOpenidMd5))

    # Get FeedsInfo
    if FetchFeedsInfo(listFeedId, iPaAppidMd5, iOpenidMd5) < 0:
        return -1

    # Get UserInfo
    if FetchUserInfo(listOpenidMd5) < 0:
        return -1

    # Gen FollowId set & FollowInfo list
    listFollowId = []
    listFollowInfo = []

    #倒序[::-1]
    for i in range(len(stResponseMsgBody.follow_list))[::-1]:
        tmp_follow_feed_id = stResponseMsgBody.follow_list[i].feed_id
        tmp_follow_openid_md5 = stResponseMsgBody.follow_list[
            i].openid_md5_from
        if tmp_follow_feed_id in listFeedId and tmp_follow_openid_md5 in listOpenidMd5:
            listFollowId.append(stResponseMsgBody.follow_list[i].follow_id)
            listFollowInfo.append(
                FollowInfoPB2Dict(stResponseMsgBody.follow_list[i]))

    mycgi.addBody('follow_list', listFollowInfo)
    return 0