Example #1
0
int PackageBuilder::HandlePkg(IPackage* reqPkg,std::list<IPackage*>& ackLst)
{
	std::list<IPackage*> lst;
	lst.push_back(reqPkg);
	return HandlePkg(lst,ackLst);
}
Example #2
0
/**
 * 消息读取
 */
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;
}