#include "UserAuth.h"
#include <string.h>
#include <time.h>
#include "globalvars.h"
#include <iostream>
#include <fstream>
using namespace std;
void CUserAuth::requestLoginImSvr()
{
USER_LOGIN_REQ loSendPack;
loSendPack.m_uUserID = g_userId;
loSendPack.m_uPlatfromType = g_ptType;
loSendPack.setGateID( g_gateId );
loSendPack.setUser2GateSessionID( g_sesId );
char token[2048]={0};
loSendPack.setMsgContent(token,sizeof(token));
loSendPack.setLastRecvMsgInfo( lastRecvMsgInfo );
lp->sendData((char*) &loSendPack,loSendPack.getSize());
printf("userId:%llu ptType:%u requestLoginImSvr \n",loSendPack.m_uUserID,loSendPack.m_uPlatfromType);
}
void CUserAuth::responseLoginImSvr( NET_HEAD* pNetData )
{
USER_LOGIN_RSP* lpRecvPack = (USER_LOGIN_RSP*)pNetData;
if(LOGIN_OK != lpRecvPack->getRetCode()){
printf("userId:%llu ptType:%u login failed\n",lpRecvPack->m_uUserID,lpRecvPack->m_uPlatfromType);
return;
}
printf("userId:%llu ptType:%u login succ\n",lpRecvPack->m_uUserID,lpRecvPack->m_uPlatfromType);
}
void CUserAuth::notifyGroupList( NET_HEAD* pNetData )
{
IMGROUP_LOAD_USER_GROUPLIST_RSP* lpRecvPack = (IMGROUP_LOAD_USER_GROUPLIST_RSP*)pNetData;
uint32 uGroupCount = lpRecvPack->getItemCount();
uint64* lpGroupIdList = (uint64*)lpRecvPack->getMsgContentBufferPtr();
if (0==uGroupCount){
printf("userId:%llu ptType:%u has no group\n",lpRecvPack->m_uUserID,lpRecvPack->m_uPlatfromType);
return;
}
for (uint32 i=0;i<uGroupCount;++i) {
printf("groupId:%llu\n",lpGroupIdList[i]);
}
}
void CUserAuth::notifyLoginOtherDevice( NET_HEAD* pNetData )
{
USER_LOGIN_ON_OTHER_DEVICE_NTY* lpRecvPack = (USER_LOGIN_ON_OTHER_DEVICE_NTY*)pNetData;
printf("userId:%llu ptType:%u notifyLoginOtherDevice\n",lpRecvPack->m_uUserID,lpRecvPack->m_uPlatfromType);
}
void CUserAuth::notifyOfflineMsgList( NET_HEAD* pNetData )
{
printf("-----------------------\n");
GET_OFFLINE_MESSAGE_LIST_RSP* lpRecvPack = (GET_OFFLINE_MESSAGE_LIST_RSP*)pNetData;
uint8 uPtType = lpRecvPack->m_uPlatfromType;
uint16 uOfflineMsgTotalCount = lpRecvPack->getOfflineMsgTotalCount();
uint16 uOfflineMsgCount = 0 ;
uint32 uRemainLen = lpRecvPack->getMsgContentBufferLen();
char* ptr = lpRecvPack->getMsgContentBufferPtr();
//已经阅读的回执
while ( 1 )
{
if (uRemainLen < MSG_DATA::getMinPacketSize())
break;
MSG_DATA* pMsgData = (MSG_DATA*)ptr;
if (pMsgData->getSize() < MSG_DATA::getMinPacketSize() || pMsgData->getSize() > MSG_DATA::MAX_PACKET_SIZE)
{
break;
}
printf("fromid:%llu,toId:%llu,msgId:%llu,msgData:%s\n",pMsgData->moDescriptionHeader.m_uFromID,pMsgData->moDescriptionHeader.m_uToID,pMsgData->moDescriptionHeader.m_uMessageId,pMsgData->getMsgContentBufferPtr());
receiptOfflineMsgRecv( pMsgData->moDescriptionHeader.m_uMessageId,pMsgData->moDescriptionHeader.m_uTimestamp,pMsgData->moDescriptionHeader.m_uFromID,pMsgData->moDescriptionHeader.m_uToID);
uOfflineMsgCount++;
ptr += pMsgData->getSize();
uRemainLen -= pMsgData->getSize();
if ( 0 == uRemainLen)
break;
}
printf("notifyOfflineMsgListRsp userId:%llu ptType:%u offlinecount:%lu fromFriId:%llu\n",lpRecvPack->m_uUserID,lpRecvPack->m_uPlatfromType,uOfflineMsgCount,lpRecvPack->m_uClientReserve64BitField1 );
requestSendMsg();
}
void CUserAuth::requestRegisterSvr()
{
SERVER_LOGIN_REQ loSendPack;
loSendPack.setServerID(g_gateId);
lp->sendData((char*) &loSendPack,loSendPack.getSize());
}
void CUserAuth::responseRegisterSvr( NET_HEAD* pNetData )
{
printf("responseRegisterSvr\n");
requestLoginImSvr();
}
void CUserAuth::notityUseLastChatInfo( NET_HEAD* pNetData )
{//CMD_USER_LAST_CHAT_INFO_NTY
printf("-----------------------\n");
USER_LAST_CHAT_INFO_NTY* lpRecvPack = (USER_LAST_CHAT_INFO_NTY*)pNetData;
printf("notityUseLastChatInfo userId:%llu ptType:%u endflag:%d\n",lpRecvPack->m_uUserID,lpRecvPack->m_uPlatfromType,lpRecvPack->getRecvEndFlag());
FRIEND_CHAT_BASE_INFO* lpInfoList = (FRIEND_CHAT_BASE_INFO*)lpRecvPack->getMsgContentBufferPtr();
uint32 uInfoCount = lpRecvPack->getItemCount();
if (uInfoCount==0) {
return;
}
for (uint32 i=0;i<uInfoCount;i++)
{
const FRIEND_CHAT_BASE_INFO& info = lpInfoList[i];
printf("%d friId:%llu lastReadMsgId:%llu\n",i ,info.muFriendId,info.muMsgIdOfLastRead);
}
}
void CUserAuth::requestSendMsg()
{
printf("-----------------------\n");
USER_MSG_INVITE_REQ loSendPack;
loSendPack.m_uUserID = g_userId;
loSendPack.m_uPlatfromType = g_ptType;
loSendPack.setGateID( g_gateId );
loSendPack.setUser2GateSessionID( g_sesId );
loSendPack.setAction(MSG_ACTION_NORMAL);
loSendPack.setSourceType(IM_SOURCE_TYPE_PRIVATE_CHAT);
loSendPack.moDescriptionHeader.m_uFromID = g_fromId;
loSendPack.moDescriptionHeader.m_uToID = g_toId;
char buffer[512]={0};
sprintf(buffer,"time:%d uid:%llu say:hello",(int)time(NULL),g_userId);
loSendPack.setMsgContent(buffer,strlen(buffer)+1);
lp->sendData((char*) &loSendPack,loSendPack.getSize());
printf("requestSendMsg msgSize:%d msgData:%s\n",loSendPack.getMsgContentBufferLen(),loSendPack.getMsgContentBufferPtr());
}
void CUserAuth::responseSendMsg(NET_HEAD* pNetData )
{
USER_MSG_INVITE_RSP* lpRecvPack = (USER_MSG_INVITE_RSP*)pNetData;
printf("responseSendMsg userId:%llu ptType:%u ret:%d msgId:%llu msgTime:%llu\n",
lpRecvPack->m_uUserID,lpRecvPack->m_uPlatfromType,
lpRecvPack->getRetCode(),lpRecvPack->moDescriptionHeader.m_uMessageId,lpRecvPack->moDescriptionHeader.m_uTimestamp);
}
void CUserAuth::notifyMsgRecv( NET_HEAD* pNetData )
{
USER_MSG_INVITE_NTY* lpRecvPack = (USER_MSG_INVITE_NTY*)pNetData;
const uint64& fromId = lpRecvPack->moDescriptionHeader.m_uFromID;//发送者
const uint64& toId = lpRecvPack->moDescriptionHeader.m_uToID;
uint64 msgId = lpRecvPack->moDescriptionHeader.m_uMessageId;
{//已经接收的回执
USER_MSG_INVITE_RECEIPT loSendPack;
loSendPack.m_uUserID = g_userId;
loSendPack.m_uPlatfromType = g_ptType;
loSendPack.setGateID( g_gateId ) ;
loSendPack.setUser2GateSessionID( g_sesId );
loSendPack.setFromID( lpRecvPack->m_uUserID );//此包的发送者
loSendPack.setMsgReceiptType( MSG_RECEIPT_ACCEPT );
loSendPack.push_back( msgId );
lp->sendData((char*) &loSendPack,loSendPack.getSize());
}
{//已经阅读的回执
USER_MSG_INVITE_RECEIPT loSendPack;
loSendPack.m_uUserID = g_userId;
loSendPack.m_uPlatfromType = g_ptType;
loSendPack.setGateID( g_gateId ) ;
loSendPack.setUser2GateSessionID( g_sesId );
loSendPack.setFromID( lpRecvPack->m_uUserID );//此包的发送者
loSendPack.setMsgReceiptType( MSG_RECEIPT_READ );
loSendPack.push_back( msgId );
lp->sendData((char*) &loSendPack,loSendPack.getSize());
}
//处理消息同步包
if (fromId == g_userId) {
return notifyMsgSync(pNetData);
}
updateLastRecvMsgInfo(lpRecvPack->moDescriptionHeader.m_uMessageId,lpRecvPack->moDescriptionHeader.m_uTimestamp);
printf("-->notifyMsgRecv userId:%llu ptType:%u ret:%d msgId:%llu msgTime:%llu fromId:%llu,toId:%llu,msgData:%s\n",
lpRecvPack->m_uUserID,
lpRecvPack->m_uPlatfromType,
lpRecvPack->getRetCode(),
lpRecvPack->moDescriptionHeader.m_uMessageId,
lpRecvPack->moDescriptionHeader.m_uTimestamp,
fromId,
toId,
lpRecvPack->getMsgContentBufferPtr()
);
}
void CUserAuth::notifyMsgSync( NET_HEAD* pNetData )
{
USER_MSG_INVITE_NTY* lpRecvPack = (USER_MSG_INVITE_NTY*)pNetData;
const uint64& fromId = lpRecvPack->moDescriptionHeader.m_uFromID;//发送者
const uint64& toId = lpRecvPack->moDescriptionHeader.m_uToID;
printf("notifyMsgSync userId:%llu ptType:%u notifyMsgSync ret:%d msgId:%llu msgTime:%llu fromId:%llu,toId:%llu,msgData:%s\n",
lpRecvPack->m_uUserID,
lpRecvPack->m_uPlatfromType,
lpRecvPack->getRetCode(),
lpRecvPack->moDescriptionHeader.m_uMessageId,