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 + -
显示快捷键?