MsgStatus CMessage2Parser::_ParserHead(CMessage* pMsg, const CBufferMessage& pBuf) { uint8* pData = pBuf.GetBuffer(); uint8 NumByte[4] = {0}; if (!pData) { return MsgStatus_Err; } for (int index = 0; index < MSG_CLASS_LEN; index++) { NumByte[index] = pData[MSG_PACKSIZE_INDEX + index]; } if (pBuf.GetSize() != _ByteToInt(NumByte)) { return MsgStatus_Err; } memset(NumByte,0,4); for (int index = 0; index < MSG_CLASS_COMMAND; index++) { NumByte[index] = pData[MSG_COMMAND_INDEX + index]; } m_MsgId = _ByteToInt(NumByte); return MsgStatus_Ok; }
MsgStatus CMessage2Parser::_ParserTail(CMessage* pMsg, const CBufferMessage& pBuf) { uint8* pData = pBuf.GetBuffer(); if (pData[CMessage2Parser::GetMessageLen(pBuf.GetBuffer(), pBuf.GetSize()) - 1] != MSG_END) { return MsgStatus_Err; } return MsgStatus_Ok; }
void CNetCenter::OnPackReady(const CBufferMessage &buffer ) { Global->Logf(LogFile_Net,_T("OnPackReady, size:%d\n"),buffer.GetSize()); CMessage2Parser parser; CMessage msg(parser.GetMsgType(buffer)); if(parser.Parser(&msg, buffer) == MsgStatus_Ok) { _DispatchMessage(msg); } }