void RPCClientTransportLayer::recv(std::string &outBuf) throw(ServiceException) { SFPacket* pPacket = NULL; DWORD dwCurrentTime = GetTickCount(); DWORD dwLastTime = dwCurrentTime; while (pPacket == NULL) { pPacket = (SFPacket*)SFNetworkEntry::GetInstance()->GetTCPNetwork()->GetRPCResult(); //if (dwLastTime - dwCurrentTime > 5000) //break; //dwLastTime = GetTickCount(); Sleep(1); } if (pPacket != NULL) { int size = pPacket->GetDataSize(); outBuf.append((const char*)pPacket->GetData(), pPacket->GetDataSize()); SFEngine::GetInstance()->ReleasePacket(pPacket); } }
BasePacket* SFCGSFPacketProtocol::GetPacket(int& errorCode) { SFPacket* pPacket = SFPacketPool::GetInstance()->Alloc(); pPacket->Initialize(); if (FALSE == m_pPacketIOBuffer->GetPacket(*pPacket->GetHeader(), (char*)pPacket->GetData(), m_packetSize, errorCode)) { SFPacketPool::GetInstance()->Release(pPacket); return nullptr; } if (FALSE == pPacket->Decode(m_packetSize, errorCode)) { SFPacketPool::GetInstance()->Release(pPacket); return nullptr; } return pPacket; }