示例#1
0
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;
}