From 0d9dfad4a50f24d32f2cf81e7bdb2ef4ec315c3f Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Fri, 19 Dec 2014 15:52:05 +1100 Subject: [PATCH] Implemented 'full unload' methods, not used yet --- server/server_application.hpp | 3 ++ server/server_methods.cpp | 62 +++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/server/server_application.hpp b/server/server_application.hpp index bd01b5f..a47bef6 100644 --- a/server/server_application.hpp +++ b/server/server_application.hpp @@ -96,6 +96,9 @@ private: void HandleCharacterExists(CharacterPacket* const); void SaveServerState(); + void FullClientUnload(int index); + void FullAccountUnload(int index); + void FullCharacterUnload(int index); //character management void HandleCharacterCreate(CharacterPacket* const); diff --git a/server/server_methods.cpp b/server/server_methods.cpp index d9e433f..b3e77c6 100644 --- a/server/server_methods.cpp +++ b/server/server_methods.cpp @@ -79,3 +79,65 @@ void ServerApplication::HandleShutdownRequest(ClientPacket* const argPacket) { //finished this routine std::cout << "Shutdown signal accepted" << std::endl; } + +//------------------------- +//full unload methods +//------------------------- + +void ServerApplication::FullClientUnload(int index) { + clientMgr.UnloadIf([&](std::pair client) -> bool { + //skip the wrong clients + if (client.first != index) { + return false; + } + + //unload associated accounts + for (auto& it : *accountMgr.GetContainer()) { + if (it.second.GetClientIndex() == index) { + FullAccountUnload(it.first); + } + } + + //unload this client + return true; + }); +} + +void ServerApplication::FullAccountUnload(int index) { + accountMgr.UnloadIf([&](std::pair account) -> bool { + //skip the wrong accounts + if (account.first != index) { + return false; + } + + //unload associated characters + for (auto& it : *characterMgr.GetContainer()) { + if (it.second.GetOwner() == index) { + FullCharacterUnload(it.first); + } + } + + //unload this account + return true; + }); +} + +void ServerApplication::FullCharacterUnload(int index) { + characterMgr.UnloadIf([&](std::pair character) -> bool { + //skip the wrong characters + if (character.first != index) { + return false; + } + + //pump character unload + CharacterPacket newPacket; + newPacket.type = SerialPacketType::CHARACTER_DELETE; + newPacket.characterIndex = character.first; + //NOTE: more character info as needed + + PumpPacket(&newPacket); + + //unload this character + return true; + }); +}