void AmptekSDD123Server::onResponsePacketReady()
{
	requestPacketTimer_->stop();
	syncPacketTimer_->stop();

	AmptekSDD123Packet lastRequestPacket = currentRequestPacket_;
	AmptekSDD123Packet responsePacket(currentRequestPacket_.packetID(), totalResponseDatagram_);

	if (!responsePacket.isValid()) {
		AMDSRunTimeSupport::debugMessage(AMDSRunTimeSupport::ErrorMsg, this, AMPTEK_SERVER_ERR_INVALID_PACKET_DATA, QString("The datagram of reponse packet is invalid (error %1)").arg(responsePacket.lastError()));
	}

	processLocalStoredPacket(responsePacket);
	processResponseFeedback(responsePacket);
	processLastRequestPacket(lastRequestPacket);
	sendPacketInQueue();
}
Ejemplo n.º 2
0
ClientLobbyState::ClientLobbyState(
	FlexKit::GameFramework* IN_framework,
	GameClientState*		IN_client,
	NetworkState*			IN_network, 
	char*					IN_localPlayerName) :
		FrameworkState	{IN_framework},

		client			{IN_client},
		localPlayerName {IN_localPlayerName},
		network			{IN_network},
		packetHandlers	{IN_framework->core->GetBlockMemory()},
		ready			{false},
		refreshCounter	{0},
		screen			{IN_framework->core->GetBlockMemory(), IN_framework->DefaultAssets.Font}
{
	packetHandlers.push_back(
		CreatePacketHandler(
			LobbyMessage, 
			[&](auto, auto, auto)
			{
				std::cout << "Message Received!\n";
			}, 
			IN_framework->core->GetBlockMemory()));


	packetHandlers.push_back(
		CreatePacketHandler(
			ClientDataRequest,
			[&](UserPacketHeader* incomingPacket, RakNet::Packet* P, NetworkState* network)
			{
				auto				request = reinterpret_cast<RequestClientDataPacket*>(incomingPacket);
				ClientDataPacket	responsePacket(request->playerID, localPlayerName);

				client->localID = request->playerID;

				FK_LOG_INFO("Sending Client Info");
				std::cout << "playerID set to: " << request->playerID << "\n";
				network->SendPacket(responsePacket.GetRawPacket(), P->systemAddress);
			},
			IN_framework->core->GetBlockMemory()));


	packetHandlers.push_back(
		CreatePacketHandler(
			RequestPlayerListResponse,
			[&](UserPacketHeader* incomingPacket, RakNet::Packet* P, NetworkState* network)
			{
				FK_LOG_INFO("Player List Received");

				screen.ClearRows();
				client->remotePlayers.clear();

				auto playerList				= reinterpret_cast<PlayerListPacket*>(incomingPacket);
				const size_t playerCount	= FlexKit::max(FlexKit::min(playerList->playerCount, 3u), 0u);

				screen.CreateRow		(client->localID);
				screen.SetPlayerName	(client->localID, localPlayerName);
				screen.SetPlayerReady	(client->localID, ready);

				for (size_t idx = 0; idx < playerCount; ++idx)
				{
					auto nameStr	= playerList->Players[idx].playerName;
					auto id			= playerList->Players[idx].playerID;
					auto ready		= playerList->Players[idx].ready;

					client->remotePlayers.push_back({ playerList->Players[idx].playerID });
					strncpy(client->remotePlayers.back().name, nameStr, sizeof(RemotePlayer::name));

					screen.CreateRow		(id);
					screen.SetPlayerName	(id, client->remotePlayers.back().name);
					screen.SetPlayerReady	(id, ready);
				}
			},
			IN_framework->core->GetBlockMemory()));

		packetHandlers.push_back(
		CreatePacketHandler(
			StartGame,
			[&](UserPacketHeader* incomingPacket, RakNet::Packet* P, NetworkState* network)
			{
				FK_LOG_INFO("Starting Game");
				client->StartGame();
			},
			IN_framework->core->GetBlockMemory()));

	network->PushHandler(&packetHandlers);
}