void RemoteTransport::SendAuthData(bool bInterval) { if (0 == auth_ip_ || 0 == auth_port_) { return; } if (GetCurNetClient().IsClosed()) { return; } int64_t nCurTime = Utils::Time(); if (bInterval) { if ((nCurTime - m_nAuthTime) < s_nAuthPeriod) { return; } } m_nAuthTime = nCurTime; InetAddress nAddr(auth_ip_, auth_port_); LogINFO("Send auth data.%s", nAddr.AsString().c_str()); std::string strAuthData = "Hello, this is auth data!"; PACK_RELAYSVR_AUTH_REQ auth_req; auth_req.ip_ = auth_ip_; auth_req.port_ = auth_port_; memcpy(auth_req.data_, strAuthData.data(), strAuthData.length()); auth_req.datalen_ = strAuthData.length(); SendPdu(auth_req); }
void CRouteConn::_HandleUserClientType(CImPduUserClientTypeRequest *pPdu) { uint32_t user_id = pPdu->GetUserId(); uint32_t attach_len = pPdu->GetAttachLen(); uchar_t* attach_data = pPdu->GetAttachData(); log("HandleUserClientType, user_id = %u\n", user_id); RouteConnMap_t* pConnMap = get_route_conns(user_id); uint32_t client_type_flag = 0x00; if (pConnMap != NULL) { RouteConnMap_t::iterator it = pConnMap->begin(); for (; it != pConnMap->end(); it++) { if (it->first != this) { uint32_t client_type_flag_tmp = it->second; client_type_flag |= client_type_flag_tmp; } } } CImPduUserClientTypeResponse pdu(user_id, client_type_flag, attach_len, attach_data); pdu.SetReserved(pPdu->GetReserved()); SendPdu(&pdu); }
void CRouteConn::_HandleUsersStatusRequest(CImPduUsersStatusRequest* pPdu) { uint32_t request_id = pPdu->GetRequestId(); uint32_t query_count = pPdu->GetQueryCount(); log("HandleUserStatusReq, req_id=%u, query_count=%u\n", request_id, query_count); const list<uint32_t>& query_list = pPdu->GetQueryList(); list<user_stat_t> result_list; user_stat_t status; for(list<uint32_t>::const_iterator itQ=query_list.begin(); itQ!=query_list.end(); ++itQ) { UserStatMap_t::iterator it = g_rs_user_map.find(*itQ); if (it != g_rs_user_map.end()) { status.status = it->second.status; } else { status.status = USER_STATUS_OFFLINE; } status.user_id = *itQ; result_list.push_back(status); } // send back query user status CImPduUsersStatusResponse pdu(request_id, result_list); pdu.SetReserved(pPdu->GetReserved()); SendPdu(&pdu); }
void CRouteServConn::OnTimer(uint64_t curr_tick) { if (curr_tick > m_last_send_tick + SERVER_HEARTBEAT_INTERVAL) { CImPduHeartbeat pdu; SendPdu(&pdu); } if (curr_tick > m_last_recv_tick + SERVER_TIMEOUT) { log("conn to route server timeout\n"); Close(); } }
uint32_t ClientConn::getUnreadMsgCnt(uint32_t nUserId) { CImPdu cPdu; IM::Message::IMUnreadMsgCntReq msg; msg.set_user_id(nUserId); cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::SID_MSG); cPdu.SetCommandId(IM::BaseDefine::CID_MSG_UNREAD_CNT_REQUEST); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); return nSeqNo; }
uint32_t ClientConn::getGroupList(uint32_t nUserId) { CImPdu cPdu; IM::Group::IMNormalGroupListReq msg; msg.set_user_id(nUserId); printf("%d\n" , nUserId); cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::SID_GROUP); cPdu.SetCommandId(IM::BaseDefine::CID_GROUP_NORMAL_LIST_REQUEST); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); return nSeqNo; }
uint32_t ClientConn::getUser(uint32_t nUserId, uint32_t nTime) { CImPdu cPdu; IM::Buddy::IMAllUserReq msg; msg.set_user_id(nUserId); msg.set_latest_update_time(nTime); cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::SID_BUDDY_LIST); cPdu.SetCommandId(IM::BaseDefine::CID_BUDDY_LIST_ALL_USER_REQUEST); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); return nSeqNo; }
uint32_t ClientConn::getRecentSession(uint32_t nUserId, uint32_t nLastTime) { CImPdu cPdu; IM::Buddy::IMRecentContactSessionReq msg; msg.set_user_id(nUserId); msg.set_latest_update_time(nLastTime); cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::SID_BUDDY_LIST); cPdu.SetCommandId(IM::BaseDefine::CID_BUDDY_LIST_RECENT_CONTACT_SESSION_REQUEST); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); return nSeqNo; }
uint32_t ClientConn::getUserInfo(uint32_t nUserId, list<uint32_t>& lsUserId) { CImPdu cPdu; IM::Buddy::IMUsersInfoReq msg; msg.set_user_id(nUserId); for (auto it=lsUserId.begin(); it!=lsUserId.end(); ++it) { msg.add_user_id_list(*it); } cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::SID_BUDDY_LIST); cPdu.SetCommandId(IM::BaseDefine::CID_BUDDY_LIST_USER_INFO_REQUEST); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); return nSeqNo; }
uint32_t ClientConn::sendMsgAck(uint32_t nUserId, uint32_t nPeerId, IM::BaseDefine::SessionType nType, uint32_t nMsgId) { CImPdu cPdu; IM::Message::IMMsgDataAck msg; msg.set_user_id(nUserId); msg.set_session_id(nPeerId); msg.set_session_type(nType); msg.set_msg_id(nMsgId); cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::DFFX_SID_MSG); cPdu.SetCommandId(IM::BaseDefine::DFFX_CID_MSG_READ_ACK); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); return nSeqNo; }
void CRouteServConn::OnConfirm() { log("connect to route server success\n"); m_bOpen = true; m_connect_time = get_tick_count(); g_route_server_list[m_serv_idx].reconnect_cnt = MIN_RECONNECT_CNT / 2; if (g_master_rs_conn == NULL) { update_master_route_serv_conn(); } list<user_conn_stat_t> online_user_list; CImUserManager::GetInstance()->GetOnlineUserInfo(&online_user_list); CImPduOnlineUserInfo pdu(&online_user_list); SendPdu(&pdu); }
uint32_t ClientConn::login(const string &strName, const string &strPass) { CImPdu cPdu; IM::Login::IMLoginReq msg; msg.set_user_name(strName); msg.set_password(strPass); msg.set_online_status(IM::BaseDefine::USER_STATUS_ONLINE); msg.set_client_type(IM::BaseDefine::CLIENT_TYPE_WINDOWS); msg.set_client_version("1.0"); cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::SID_LOGIN); cPdu.SetCommandId(IM::BaseDefine::CID_LOGIN_REQ_USERLOGIN); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); return nSeqNo; }
uint32_t ClientConn::getMsgList(uint32_t nUserId, IM::BaseDefine::SessionType nType, uint32_t nPeerId, uint32_t nMsgId, uint32_t nMsgCnt) { CImPdu cPdu; IM::Message::IMGetMsgListReq msg; msg.set_user_id(nUserId); msg.set_session_type(nType); msg.set_session_id(nPeerId); msg.set_msg_id_begin(nMsgId); msg.set_msg_cnt(nMsgCnt); cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::SID_MSG); cPdu.SetCommandId(IM::BaseDefine::CID_MSG_LIST_REQUEST); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); return nSeqNo; }
void ClientConn::OnTimer(uint64_t curr_tick) { if (curr_tick > m_last_send_tick + CLIENT_HEARTBEAT_INTERVAL) { CImPdu cPdu; IM::Other::IMHeartBeat msg; cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::DFFX_SID_OTHER); cPdu.SetCommandId(IM::BaseDefine::DFFX_CID_OTHER_HEARTBEAT); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); } if (curr_tick > m_last_recv_tick + CLIENT_TIMEOUT) { log("conn to msg_server timeout\n"); Close(); } }
uint32_t ClientConn::sendMessage(uint32_t nFromId, uint32_t nToId, IM::BaseDefine::MsgType nType, const string& strMsgData) { CImPdu cPdu; IM::Message::IMMsgData msg; msg.set_from_user_id(nFromId); msg.set_to_session_id(nToId); msg.set_msg_id(0); msg.set_create_time(time(NULL)); msg.set_msg_type(nType); msg.set_msg_data(strMsgData); cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::SID_MSG); cPdu.SetCommandId(IM::BaseDefine::CID_MSG_DATA); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); return nSeqNo; }
uint32_t ClientConn::getDepartMentInfo(uint32_t nUserId , uint32_t nLastTime) { CImPdu cPdu; IM::Buddy::IMDepartmentReq msg; msg.set_user_id(nUserId); msg.set_latest_update_time(nLastTime); cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::SID_BUDDY_LIST); cPdu.SetCommandId( IM::BaseDefine::CID_BUDDY_LIST_DEPARTMENT_REQUEST); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); return nSeqNo; }
void CRouteConn::_HandleUserStatusRequest(CImPduUserStatusRequest* pPdu) { uint32_t request_id = pPdu->GetRequestId(); uint32_t query_id = pPdu->GetQueryId(); uint32_t attach_len = pPdu->GetAttachLen(); uchar_t* attach_data = pPdu->GetAttachData(); log("HandleUserStatusReq, req_id=%u, query_id=%u\n", request_id, query_id); uint32_t status = USER_STATUS_OFFLINE; UserStatMap_t::iterator it = g_rs_user_map.find(query_id); if (it != g_rs_user_map.end()) { status = it->second.status; } // send back query user status CImPduUserStatusResponse pdu(request_id, query_id, status, attach_len, attach_data); pdu.SetReserved(pPdu->GetReserved()); SendPdu(&pdu); }
uint32_t ClientConn::getGroupInfo(uint32_t nUserId , const list<IM::BaseDefine::GroupVersionInfo> &lsGroupVersionInfo) { CImPdu cPdu; IM::Group::IMGroupInfoListReq msg; msg.set_user_id(nUserId); for(const auto &vi:lsGroupVersionInfo) { IM::BaseDefine::GroupVersionInfo* pGroupVersionInfo = msg.add_group_version_list(); pGroupVersionInfo->set_group_id(vi.group_id()); pGroupVersionInfo->set_version(0); } cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::SID_GROUP); cPdu.SetCommandId(IM::BaseDefine::CID_GROUP_INFO_REQUEST); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); return nSeqNo; }
void CRouteConn::_HandleFriendStatusQuery(CImPduFriendStatusQuery* pPdu) { uint32_t from_user_id = pPdu->GetFromUserId(); uint32_t friend_cnt = pPdu->GetFriendCnt(); uint32_t* friend_id_list = pPdu->GetFriendIdList(); list<user_stat_t> friend_status_list; user_stat_t stat; log("HandleOnlineQuery, from_id=%d\n", from_user_id); for (uint32_t i = 0; i < friend_cnt; i++) { uint32_t friend_id = friend_id_list[i]; UserStatMap_t::iterator it = g_rs_user_map.find(friend_id); if (it != g_rs_user_map.end()) { stat.user_id = friend_id; stat.status = it->second.status; friend_status_list.push_back(stat); } } CImPduFriendStatusList pdu(pPdu->GetRequestType(), from_user_id, &friend_status_list); SendPdu(&pdu); }
uint32_t ClientConn::sendMessage(uint32_t nFromId, uint32_t nToId, IM::BaseDefine::MsgType nType, const string& strMsgData) { CImPdu cPdu; IM::Message::IMMsgData msg; msg.set_from_user_id(nFromId); msg.set_to_session_id(nToId); msg.set_msg_id(0); msg.set_create_time(time(NULL)); msg.set_msg_type(nType); //msg.set_msg_data(strMsgData); //EncryptMsg char * pOutData=NULL; uint32_t nOutLen = 0; int retCode = EncryptMsg( strMsgData.c_str(), strMsgData.length(), &pOutData, nOutLen); if (retCode == 0 && nOutLen > 0 && pOutData != 0) { msg.set_msg_data( pOutData, nOutLen); //delete pOutData; Free(pOutData); pOutData = NULL; } else { log("EncryptMsg error:%s\n", strMsgData.c_str()); msg.set_msg_data( strMsgData); } cPdu.SetPBMsg(&msg); cPdu.SetServiceId(IM::BaseDefine::DFFX_SID_MSG); cPdu.SetCommandId(IM::BaseDefine::DFFX_CID_MSG_DATA); uint32_t nSeqNo = m_pSeqAlloctor->getSeq(ALLOCTOR_PACKET); cPdu.SetSeqNum(nSeqNo); SendPdu(&cPdu); return nSeqNo; }
void RemoteTransport::SendHeadBeat() { PACK_RELAYSVR_HEARTBEAT_PACKET heart_beat; heart_beat.heartbeat_tag_ = 0; SendPdu(heart_beat); }