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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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();
	}
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
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;
}
Exemplo n.º 8
0
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;
}
Exemplo n.º 9
0
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;
}
Exemplo n.º 10
0
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;
}
Exemplo n.º 11
0
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);
}
Exemplo n.º 12
0
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;
}
Exemplo n.º 13
0
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;
}
Exemplo n.º 14
0
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();
    }
}
Exemplo n.º 15
0
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;
}
Exemplo n.º 16
0
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;

}
Exemplo n.º 17
0
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);
}
Exemplo n.º 18
0
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;
}
Exemplo n.º 19
0
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);
}
Exemplo n.º 20
0
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);
}