From 712d94d3b2dad5438a3447853cf4c78d370709d8 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Wed, 10 Sep 2014 16:57:35 +1000 Subject: [PATCH] Client now handles character rejections --- client/scenes/in_world.cpp | 18 +++++++++++++++++- client/scenes/in_world.hpp | 1 + client/scenes/lobby_menu.cpp | 8 -------- server/server_methods.cpp | 2 +- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/client/scenes/in_world.cpp b/client/scenes/in_world.cpp index 8db57e1..a79f3b3 100644 --- a/client/scenes/in_world.cpp +++ b/client/scenes/in_world.cpp @@ -73,6 +73,14 @@ InWorld::InWorld( //TODO: Tile size and tile sheet should be loaded elsewhere tileSheet.Load(config["dir.tilesets"] + "terrain.bmp", 32, 32); + //send this player's character info + CharacterPacket newPacket; + newPacket.type = SerialPacketType::CHARACTER_NEW; + strncpy(newPacket.handle, config["client.handle"].c_str(), PACKET_STRING_SIZE); + strncpy(newPacket.avatar, config["client.avatar"].c_str(), PACKET_STRING_SIZE); + newPacket.accountIndex = accountIndex; + network.SendTo(Channels::SERVER, &newPacket); + //request a sync RequestSynchronize(); @@ -302,6 +310,9 @@ void InWorld::HandlePacket(SerialPacket* const argPacket) { case SerialPacketType::CHARACTER_UPDATE: HandleCharacterUpdate(static_cast(argPacket)); break; + case SerialPacketType::CHARACTER_REJECTION: + HandleCharacterRejection(static_cast(argPacket)); + break; case SerialPacketType::REGION_CONTENT: HandleRegionContent(static_cast(argPacket)); break; @@ -389,7 +400,6 @@ void InWorld::HandleCharacterDelete(CharacterPacket* const argPacket) { void InWorld::HandleCharacterUpdate(CharacterPacket* const argPacket) { if (characterMap.find(argPacket->characterIndex) == characterMap.end()) { - std::cout << "Warning: HandleCharacterUpdate() is passing to HandleCharacterNew()" << std::endl; HandleCharacterNew(argPacket); return; } @@ -404,6 +414,12 @@ void InWorld::HandleCharacterUpdate(CharacterPacket* const argPacket) { } } +void InWorld::HandleCharacterRejection(TextPacket* const argPacket) { + std::cerr << "Error: " << argPacket->text << std::endl; + RequestDisconnect(); + SetNextScene(SceneList::CLEANUP); +} + void InWorld::HandleRegionContent(RegionPacket* const argPacket) { //replace existing regions regionPager.UnloadRegion(argPacket->x, argPacket->y); diff --git a/client/scenes/in_world.hpp b/client/scenes/in_world.hpp index aceb189..010bea8 100644 --- a/client/scenes/in_world.hpp +++ b/client/scenes/in_world.hpp @@ -83,6 +83,7 @@ protected: void HandleCharacterNew(CharacterPacket* const); void HandleCharacterDelete(CharacterPacket* const); void HandleCharacterUpdate(CharacterPacket* const); + void HandleCharacterRejection(TextPacket* const); void HandleRegionContent(RegionPacket* const); //Server control diff --git a/client/scenes/lobby_menu.cpp b/client/scenes/lobby_menu.cpp index a6f5bac..8a1c4d1 100644 --- a/client/scenes/lobby_menu.cpp +++ b/client/scenes/lobby_menu.cpp @@ -223,14 +223,6 @@ void LobbyMenu::HandleJoinResponse(ClientPacket* const argPacket) { accountIndex = argPacket->accountIndex; network.Bind(argPacket->srcAddress, Channels::SERVER); SetNextScene(SceneList::INWORLD); - - //send this player's character info - CharacterPacket newPacket; - newPacket.type = SerialPacketType::CHARACTER_NEW; - strncpy(newPacket.handle, config["client.handle"].c_str(), PACKET_STRING_SIZE); - strncpy(newPacket.avatar, config["client.avatar"].c_str(), PACKET_STRING_SIZE); - newPacket.accountIndex = accountIndex; - network.SendTo(Channels::SERVER, &newPacket); } void LobbyMenu::HandleJoinRejection(TextPacket* const argPacket) { diff --git a/server/server_methods.cpp b/server/server_methods.cpp index 184dd28..8c5a623 100644 --- a/server/server_methods.cpp +++ b/server/server_methods.cpp @@ -185,7 +185,7 @@ void ServerApplication::HandleCharacterNew(CharacterPacket* const argPacket) { if (characterIndex == -1) { msg += "Character already loaded: "; } - else if (characterIndex == -1) { + else if (characterIndex == -2) { msg += "Character already exists: "; } msg += argPacket->handle;