immsgengine.cpp
来自「国内著名嵌入式培训机构内部资料,内含一些实例代码,包括技术专题书籍」· C++ 代码 · 共 95 行
CPP
95 行
/*
============================================================================
Author : hou maoqing
Version : 1.0
Copyright : Copyright (c) Hou maoqing 2008
Mail : houmqing@163.com
============================================================================
*/
#include "ImMsgEngine.h"
#include "ImPublic.h"
CImMsgEngine::CImMsgEngine()
{
m_pReceivedBuf=NULL;
m_pObserver=NULL;
}
CImMsgEngine::~CImMsgEngine()
{
if(m_pReceivedBuf)
delete m_pReceivedBuf;
}
CImMsgEngine* CImMsgEngine::NewLC()
{
CImMsgEngine* self = new (ELeave)CImMsgEngine();
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
CImMsgEngine* CImMsgEngine::NewL()
{
CImMsgEngine* self=CImMsgEngine::NewLC();
CleanupStack::Pop(); // self;
return self;
}
void CImMsgEngine::SetObserver(MImMsgEngineObserver* pObserver)
{
m_pObserver=pObserver;
}
void CImMsgEngine::ConstructL()
{
m_pReceivedBuf=HBufC8::NewL(20*1024);
}
void CImMsgEngine::PrintNotify( const TDesC& aMessage,TUint aAttributes)
{
}
void CImMsgEngine::PrintNotify( const TDesC8& aMessage,TUint aAttributes)
{
m_pReceivedBuf->Des().Append(aMessage);
HandleReceivedImMessage();
}
void CImMsgEngine::ErrorNotify( const TDesC& aErrMessage, TInt aErrCode )
{
}
void CImMsgEngine::SetStatus( const TDesC& aStatus )
{
}
void CImMsgEngine::HandleReceivedImMessage()
{
if(m_pReceivedBuf->Length()<=4)
return;
int nMsgLen;
memcpy((TUint8*)&nMsgLen,m_pReceivedBuf->Ptr(),4);
nMsgLen=NetToHost(nMsgLen);
if(m_pReceivedBuf->Length()<nMsgLen)
return;
CImMsg* pMsg=CImMsg::NewLC();
pMsg->Decode((TUint8*)m_pReceivedBuf->Ptr());
//处理消息
if(m_pObserver)
m_pObserver->HandleImMessage(pMsg);
//移动消息缓冲中的数据
m_pReceivedBuf->Des().Delete(0,nMsgLen);
//清除
CleanupStack::PopAndDestroy(1);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?