int PackageBuilder::HandlePkg(IPackage* reqPkg,std::list<IPackage*>& ackLst) { std::list<IPackage*> lst; lst.push_back(reqPkg); return HandlePkg(lst,ackLst); }
/** * 消息读取 */ int TestCase::Read(CLIENT_INFO_T* userClient) { int iRet = IO_SUCCESS; do { iRet = RecvPkg(userClient); if (m_stRecvBuffer.iSize > 0) { int dwRead = 0; int dwSize = m_stRecvBuffer.iSize; uint8* p = m_stRecvBuffer.cBuffer; do { CMsgBase* pMsg = NULL; int iErr = Parse(p, dwSize, &pMsg); if (ERR_SUCCESS == iErr) { // pMsg->m_pRoute = this; if (ERR_SUCCESS == HandlePkg(pMsg)) { CMsgBase::DelMsg(pMsg); } if (dwRead + dwSize == (int)m_stRecvBuffer.iSize) { m_stRecvBuffer.iSize = 0; break; } } else if (ERR_NO_MORE_DATA == iErr) { if (p != m_stRecvBuffer.cBuffer) { int dwLen = m_stRecvBuffer.iSize - dwRead; memmove(m_stRecvBuffer.cBuffer, p, dwLen); m_stRecvBuffer.iSize = dwLen; } else { if (m_stRecvBuffer.iSize >= MAX_BUFFER_SIZE) { Logger.Log(NOTIC, "the msg size is more than the max buffer"); m_stRecvBuffer.iSize = 0; } } break; } else { iRet = IO_CLOSE; Logger.Log(NOTIC, "revc err protocol close"); break; } p += dwSize; dwRead += dwSize; dwSize = m_stRecvBuffer.iSize - dwRead; } while (dwRead < (int)m_stRecvBuffer.iSize); } if (IO_CLOSE == iRet) { // Close(IO_CLOSE); } } while (IO_SUCCESS == iRet); return ERR_SUCCESS; }