Пример #1
0
 def handlePdu(self):
     if len(self._buffer) < 16:
         log.info('recv data error: {}, length: {}'.format(
             self._buffer, len(self._buffer)))
         return
     pdu = ImPdu()
     try:
         pdu.FromString(self._buffer)
     except Exception:
         log.info('=========> buffer is : [{}]'.format(self._buffer))
         log.info(traceback.format_exc())
     self._buffer = ''
     if pdu.command_id == CID_LOGIN_RES_USERLOGIN:
         self.handleLoginResponse(pdu)
     elif pdu.command_id == CID_BUDDY_LIST_RECENT_CONTACT_SESSION_RESPONSE:
         self.handleRecentContactSessionResponse(pdu)
     elif pdu.command_id == CID_BUDDY_LIST_USER_INFO_RESPONSE:
         self.hanledUserInfo(pdu)
     elif pdu.command_id == CID_MSG_DATA_ACK:
         self.handleSendMsg(pdu)
     elif pdu.command_id == CID_MSG_UNREAD_CNT_RESPONSE:
         self.handleUnreadCnt(pdu)
     elif pdu.command_id == CID_MSG_DATA:
         self.handleMsgData(pdu)
     elif pdu.command_id == CID_MSG_LIST_RESPONSE:
         self.handleListResponse(pdu)
     elif pdu.command_id == CID_OTHER_HEARTBEAT:
         self.handleHeartBeat(pdu)
     elif pdu.command_id == CID_MSG_READ_NOTIFY:
         self.handleReadNotify(pdu)
     else:
         log.info('Invalid command_id: {}'.format(pdu.command_id))
Пример #2
0
def _Logout():
    logoutReq = Login_pb2.IMLogoutReq()
    logoutReq.Clear()
    pdu = ImPdu.ImPdu()
    pdu.setMsg(logoutReq.SerializeToString())
    pdu.setServiceId(BaseDefine_pb2.SID_LOGIN)
    pdu.setCommandId(BaseDefine_pb2.CID_LOGIN_REQ_LOGINOUT)
    return pdu.SerializeToString()
Пример #3
0
def _Heartbeat():
    hb = Other_pb2.IMHeartBeat()
    hb.Clear()
    pdu = ImPdu.ImPdu()
    pdu.setMsg(hb.SerializeToString())
    pdu.setServiceId(BaseDefine_pb2.SID_OTHER)
    pdu.setCommandId(BaseDefine_pb2.CID_OTHER_HEARTBEAT)
    return pdu.SerializeToString()
Пример #4
0
    def _pduProc(self, pduBuf):
        pdu = ImPdu.ImPdu()
        pdu.FromString(pduBuf)
        if self.pdu.command_id == BaseDefine_pb2.CID_LOGIN_RES_USERLOGIN:
            self._onLogin()
        elif self.pdu.command_id == BaseDefine_pb2.CID_LOGIN_KICK_USER:

            pass
Пример #5
0
def _UnreadMsgCntReq(user_id):
    req = Message_pb2.IMUnreadMsgCntReq()
    req.Clear()
    req.user_id = user_id
    pdu = ImPdu.ImPdu()
    pdu.setMsg(req.SerializeToString())
    pdu.setServiceId(BaseDefine_pb2.SID_MSG)
    pdu.setCommandId(BaseDefine_pb2.CID_MSG_UNREAD_CNT_REQUEST)
    return pdu.SerializeToString()
Пример #6
0
def _ClientUserInfoRequest(user_id, user_id_list):
    req = Buddy_pb2.IMUsersInfoReq()
    req.Clear()
    req.user_id = user_id

    req.user_id_list.extend(user_id_list)
    pdu = ImPdu.ImPdu()
    pdu.setMsg(req.SerializeToString())
    pdu.setServiceId(BaseDefine_pb2.SID_BUDDY_LIST)
    pdu.setCommandId(BaseDefine_pb2.CID_BUDDY_LIST_USER_INFO_REQUEST)
Пример #7
0
def _RecentContactSessionReq(user_id, last_update_time=0):
    req = Buddy_pb2.IMRecentContactSessionReq()
    req.Clear()
    req.user_id = user_id
    req.latest_update_time = last_update_time
    pdu = ImPdu.ImPdu()
    pdu.setMsg(req.SerializeToString())
    pdu.setServiceId(BaseDefine_pb2.SID_BUDDY_LIST)
    pdu.setCommandId(
        BaseDefine_pb2.CID_BUDDY_LIST_RECENT_CONTACT_SESSION_REQUEST)
    return pdu.SerializeToString()
Пример #8
0
 def recvData(self):
     pdu = ImPdu()
     try:
         pduheaderbuf = self._socket.recv(16)
     except Exception as e:
         if e.errno == errno.ECONNRESET:
             log.error('receive failed: {}'.format(traceback.format_exc()))
             self._connected = False
     else:
         if len(pduheaderbuf) != 16:
             log.error("read pdu len errror, len: {}".format(
                 len(pduheaderbuf)))
             self._connected = False
             return
         try:
             pdu.FromString(pduheaderbuf)
         except Exception:
             log.error('unpack pdu length error: {}'.format(
                 traceback.format_exc()))
         else:
             buf = self._socket.recv(pdu.length - 16)
             self._buffer = pduheaderbuf
             self._buffer += buf
     self.handlePdu()
Пример #9
0
def _MsgReadAck(from_user_id,
                session_id,
                msg_id,
                session_type=BaseDefine_pb2.SESSION_TYPE_SINGLE):
    log.debug('_MsgReadAck, from: {}, to: {}, msg_id: {}'.format(
        from_user_id, session_id, msg_id))
    req = Message_pb2.IMMsgDataReadAck()
    req.Clear()
    req.user_id = from_user_id
    req.session_id = session_id
    req.session_type = session_type
    req.msg_id = msg_id
    pdu = ImPdu.ImPdu()
    pdu.setMsg(req.SerializeToString())
    pdu.setServiceId(BaseDefine_pb2.SID_MSG)
    pdu.setCommandId(BaseDefine_pb2.CID_MSG_READ_ACK)
    return pdu.SerializeToString()
Пример #10
0
def _MsgData(from_user_id,
             to_user_id,
             msg_data,
             msg_type=BaseDefine_pb2.MSG_TYPE_SINGLE_TEXT):
    log.info('_MsgData, from {} -> {}'.format(from_user_id, to_user_id))
    req = Message_pb2.IMMsgData()
    req.Clear()
    req.msg_data = msg_data
    req.from_user_id = from_user_id
    req.to_session_id = to_user_id
    req.msg_id = 0
    req.msg_type = msg_type
    req.create_time = int(time.time())
    pdu = ImPdu.ImPdu()
    pdu.setMsg(req.SerializeToString())
    pdu.setServiceId(BaseDefine_pb2.SID_MSG)
    pdu.setCommandId(BaseDefine_pb2.CID_MSG_DATA)
    return pdu.SerializeToString()
Пример #11
0
def _Login(username, password, client_type=BaseDefine_pb2.CLIENT_TYPE_IOS):
    loginReq = Login_pb2.IMLoginReq()
    loginReq.Clear()
    pdu = ImPdu.ImPdu()
    try:
        loginReq.user_name = username
        loginReq.password = password
        loginReq.online_status = BaseDefine_pb2.USER_STATUS_ONLINE
        loginReq.client_type = client_type
        loginReq.SerializeToString()
        loginReq.client_version = 'v1.1.0'
    except Exception as e:
        print traceback.format_exc()
        raise e
    else:
        pdu.setMsg(loginReq.SerializeToString())
        pdu.setServiceId(BaseDefine_pb2.SID_LOGIN)
        pdu.setCommandId(BaseDefine_pb2.CID_LOGIN_REQ_USERLOGIN)
        return pdu.SerializeToString()