From 2c06232264f0d6ce4398dcd4a88406ab35a2ee47 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Tue, 9 Sep 2014 08:39:36 +1000 Subject: [PATCH] JOIN_REJECTION works, ready for the rest --- client/scenes/lobby_menu.cpp | 9 +++++++++ client/scenes/lobby_menu.hpp | 1 + common/network/serial_utility.cpp | 4 ++-- server/server_methods.cpp | 11 +++++++---- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/client/scenes/lobby_menu.cpp b/client/scenes/lobby_menu.cpp index 88d09e6..a6f5bac 100644 --- a/client/scenes/lobby_menu.cpp +++ b/client/scenes/lobby_menu.cpp @@ -25,6 +25,7 @@ #include "utility.hpp" #include +#include //------------------------- //Public access members @@ -192,6 +193,9 @@ void LobbyMenu::HandlePacket(SerialPacket* const argPacket) { case SerialPacketType::JOIN_RESPONSE: HandleJoinResponse(static_cast(argPacket)); break; + case SerialPacketType::JOIN_REJECTION: + HandleJoinRejection(static_cast(argPacket)); + break; //handle errors default: throw(std::runtime_error(std::string() + "Unknown SerialPacketType encountered in LobbyMenu: " + to_string_custom(static_cast(argPacket->type)) )); @@ -229,6 +233,11 @@ void LobbyMenu::HandleJoinResponse(ClientPacket* const argPacket) { network.SendTo(Channels::SERVER, &newPacket); } +void LobbyMenu::HandleJoinRejection(TextPacket* const argPacket) { + //TODO: Better output + std::cerr << "Error: " << argPacket->text << std::endl; +} + //------------------------- //server control //------------------------- diff --git a/client/scenes/lobby_menu.hpp b/client/scenes/lobby_menu.hpp index e8a5d1c..1959c56 100644 --- a/client/scenes/lobby_menu.hpp +++ b/client/scenes/lobby_menu.hpp @@ -63,6 +63,7 @@ protected: void HandlePacket(SerialPacket* const); void HandleBroadcastResponse(ServerPacket* const); void HandleJoinResponse(ClientPacket* const); + void HandleJoinRejection(TextPacket* const); //server control void SendBroadcastRequest(); diff --git a/common/network/serial_utility.cpp b/common/network/serial_utility.cpp index 1f943a6..6572887 100644 --- a/common/network/serial_utility.cpp +++ b/common/network/serial_utility.cpp @@ -109,11 +109,11 @@ void deserializePacket(void* buffer, SerialPacketBase* packet) { case SerialPacketType::CHARACTER_STATS_RESPONSE: deserializeCharacter(buffer, static_cast(packet)); break; - case SerialPacketType::TEXT_BROADCAST: + case SerialPacketType::TEXT_BROADCAST: case SerialPacketType::JOIN_REJECTION: case SerialPacketType::SHUTDOWN_REJECTION: case SerialPacketType::CHARACTER_REJECTION: - serializeText(buffer, static_cast(packet)); + deserializeText(buffer, static_cast(packet)); break; } } \ No newline at end of file diff --git a/server/server_methods.cpp b/server/server_methods.cpp index bb3be96..766479d 100644 --- a/server/server_methods.cpp +++ b/server/server_methods.cpp @@ -67,9 +67,14 @@ void ServerApplication::HandleJoinRequest(ClientPacket* const argPacket) { //load the user account //TODO: handle passwords int accountIndex = accountMgr.LoadAccount(argPacket->username, clientIndex); + + //Error checking if (accountIndex < 0) { - //TODO: send rejection packet - std::cerr << "Error: Account already loaded: " << accountIndex << std::endl; + TextPacket newPacket; + newPacket.type = SerialPacketType::JOIN_REJECTION; + std::string msg = std::string() + "Account already loaded: " + argPacket->username; + strncpy(newPacket.text, msg.c_str(), PACKET_STRING_SIZE); //BUG: If the name is too long this would truncate it + network.SendTo(argPacket->srcAddress, static_cast(&newPacket)); return; } @@ -223,8 +228,6 @@ void ServerApplication::HandleCharacterUpdate(CharacterPacket* const argPacket) //make a new character if this one doesn't exist if (!character) { - //this isn't normal - std::cerr << "Warning: HandleCharacterUpdate() is passing to HandleCharacterNew()" << std::endl; HandleCharacterNew(argPacket); return; }