immsg.cpp
来自「国内著名嵌入式培训机构内部资料,内含一些实例代码,包括技术专题书籍」· C++ 代码 · 共 161 行
CPP
161 行
/*
============================================================================
Author : hou maoqing
Version : 1.0
Copyright : Copyright (c) Hou maoqing 2008
Mail : houmqing@163.com
============================================================================
*/
#include "ImPublic.h"
#include "ImRegistryResp.h"
#include "ImGetFriendListResp.h"
#include "ImSendNotifyMessageBody.h"
#include "ImNotifyFriendStatusChangeBody.h"
CImMsg::CImMsg()
{
m_pBody=NULL;
}
CImMsg::~CImMsg()
{
if(m_pBody)
delete m_pBody;
}
CImMsg* CImMsg::NewLC()
{
CImMsg* self = new (ELeave)CImMsg();
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
CImMsg* CImMsg::NewL()
{
CImMsg* self=CImMsg::NewLC();
CleanupStack::Pop(); // self;
return self;
}
void CImMsg::ConstructL()
{
}
int CImMsg::GetHeaderLen(void)
{
//4+4+4+10+10+4
return 36;
}
bool CImMsg::Encode(TUint8** ppBuf, int& nLen)
{
int nHeaderLen=this->GetHeaderLen();
int nBodyLen=0;
if(m_pBody)
nBodyLen=m_pBody->GetBodyLen();
//计算消息长度
nLen=nHeaderLen+nBodyLen;
m_nMsgLen=nLen;
*ppBuf=new (ELeave) TUint8[nLen];
TUint8* pTemp=*ppBuf;
//编码消息头
//编码消息长度
int tmp=HostToNet(m_nMsgLen);
memcpy(pTemp,(void*)&tmp,4);
pTemp+=4;
//命令ID
tmp=HostToNet(m_nCommandID);
memcpy(pTemp,(void*)&tmp,4);
pTemp+=4;
//消息序列号
tmp=HostToNet(m_nSeqNo);
memcpy(pTemp,(void*)&tmp,4);
pTemp+=4;
//源用户号码
memcpy(pTemp,m_strSrcUser,10);
pTemp+=10;
//目标用户号码
memcpy(pTemp,m_strDstUser,10);
pTemp+=10;
//响应码
tmp=HostToNet(m_nRespResult);
memcpy(pTemp,(void*)&tmp,4);
pTemp+=4;
//编码消息体
if(m_pBody)
{
int nn;
m_pBody->Encode(pTemp,nn);
}
return true;
}
void CImMsg::Decode(TUint8* pBuf)
{
//解码消息头
TUint8* pTemp=pBuf;
//解码消息长度
int tmp;
memcpy((void*)&tmp,pTemp,4);
m_nMsgLen=NetToHost(tmp);
pTemp+=4;
//命令ID
memcpy((void*)&tmp,pTemp,4);
m_nCommandID=NetToHost(tmp);
pTemp+=4;
//消息序列号
memcpy((void*)&tmp,pTemp,4);
m_nSeqNo=NetToHost(tmp);
pTemp+=4;
//源用户号码
memcpy((void*)m_strSrcUser,pTemp,10);
pTemp+=10;
//目标用户号码
memcpy((void*)m_strDstUser,pTemp,10);
pTemp+=10;
//响应码
memcpy((void*)&tmp,pTemp,4);
m_nRespResult=NetToHost(tmp);
pTemp+=4;
//解码消息体
if(m_nCommandID==ImRegisterUserResp)
{
m_pBody=new CImRegistryResp;
m_pBody->Decode(pTemp);
}
else if(m_nCommandID==ImGetFriendListResp)
{
m_pBody=new CImGetFriendListResp;
m_pBody->Decode(pTemp);
}
else if(m_nCommandID==ImNotifyReceivedMessage)
{
m_pBody=new CImSendNotifyMessageBody;
m_pBody->Decode(pTemp);
}
else if(m_nCommandID==ImNotifyFriendStatusChange)
{
m_pBody=new CImNotifyFriendStatusChangeBody;
m_pBody->Decode(pTemp);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?