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(); }
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); }