diff --git a/common/map/region_pager_base.cpp b/common/map/region_pager_base.cpp index c046bdc..4375c7d 100644 --- a/common/map/region_pager_base.cpp +++ b/common/map/region_pager_base.cpp @@ -24,6 +24,18 @@ #include #include +RegionPagerBase::RegionPagerBase() { + // +} + +RegionPagerBase::RegionPagerBase(RegionPagerBase&& rhs) { + regionList = std::move(rhs.regionList); +} + +RegionPagerBase::~RegionPagerBase() { + UnloadAll(); +} + Region::type_t RegionPagerBase::SetTile(int x, int y, int z, Region::type_t v) { Region* ptr = GetRegion(x, y); return ptr->SetTile(x - ptr->GetX(), y - ptr->GetY(), z, v); diff --git a/common/map/region_pager_base.hpp b/common/map/region_pager_base.hpp index 53bb097..c43d104 100644 --- a/common/map/region_pager_base.hpp +++ b/common/map/region_pager_base.hpp @@ -28,8 +28,9 @@ class RegionPagerBase { public: - RegionPagerBase() = default; - virtual ~RegionPagerBase() { UnloadAll(); }; + RegionPagerBase(); + RegionPagerBase(RegionPagerBase&&); + virtual ~RegionPagerBase(); //tile manipulation virtual Region::type_t SetTile(int x, int y, int z, Region::type_t v); diff --git a/common/map/region_pager_lua.cpp b/common/map/region_pager_lua.cpp index 4eeea2b..9874a71 100644 --- a/common/map/region_pager_lua.cpp +++ b/common/map/region_pager_lua.cpp @@ -23,6 +23,18 @@ #include +RegionPagerLua::RegionPagerLua() { + // +} + +RegionPagerLua::RegionPagerLua(RegionPagerLua&& rhs) { + lua = rhs.lua; + loadRef = rhs.loadRef; + saveRef = rhs.saveRef; + createRef = rhs.createRef; + unloadRef = rhs.unloadRef; +} + RegionPagerLua::~RegionPagerLua() { //unload all regions UnloadAll(); @@ -164,6 +176,7 @@ void RegionPagerLua::UnloadRegion(int x, int y) { lua_pop(lua, 1); } +//no return void RegionPagerLua::UnloadAll() { //get the pager's function from the registry lua_rawgeti(lua, LUA_REGISTRYINDEX, unloadRef); diff --git a/common/map/region_pager_lua.hpp b/common/map/region_pager_lua.hpp index 656074c..7b4c6a3 100644 --- a/common/map/region_pager_lua.hpp +++ b/common/map/region_pager_lua.hpp @@ -34,7 +34,8 @@ class RegionPagerLua : public RegionPagerBase { public: - RegionPagerLua() = default; + RegionPagerLua(); + RegionPagerLua(RegionPagerLua&&); ~RegionPagerLua(); //region manipulation diff --git a/server/accounts/account_manager.cpp b/server/accounts/account_manager.cpp index fccf530..5d3d8dc 100644 --- a/server/accounts/account_manager.cpp +++ b/server/accounts/account_manager.cpp @@ -200,7 +200,7 @@ void AccountManager::UnloadAll() { elementMap.clear(); } -void AccountManager::UnloadIf(std::function)> fn) { +void AccountManager::UnloadIf(std::function&)> fn) { //replicate std::remove_if, using custom code std::map::iterator it = elementMap.begin(); while (it != elementMap.end()) { diff --git a/server/accounts/account_manager.hpp b/server/accounts/account_manager.hpp index 9520839..5321910 100644 --- a/server/accounts/account_manager.hpp +++ b/server/accounts/account_manager.hpp @@ -48,7 +48,7 @@ public: void Delete(int uid) override; void UnloadAll() override; - void UnloadIf(std::function)> fn) override; + void UnloadIf(std::function&)> fn) override; //accessors and mutators AccountData* Get(int uid) override; diff --git a/server/characters/character_manager.cpp b/server/characters/character_manager.cpp index 13d7efa..e608835 100644 --- a/server/characters/character_manager.cpp +++ b/server/characters/character_manager.cpp @@ -227,7 +227,7 @@ void CharacterManager::UnloadAll() { elementMap.clear(); } -void CharacterManager::UnloadIf(std::function)> fn) { +void CharacterManager::UnloadIf(std::function&)> fn) { std::map::iterator it = elementMap.begin(); while (it != elementMap.end()) { if (fn(*it)) { diff --git a/server/characters/character_manager.hpp b/server/characters/character_manager.hpp index d8b2b80..2cb0b81 100644 --- a/server/characters/character_manager.hpp +++ b/server/characters/character_manager.hpp @@ -48,7 +48,7 @@ public: void Delete(int uid) override; void UnloadAll() override; - void UnloadIf(std::function)> fn) override; + void UnloadIf(std::function&)> fn) override; //accessors and mutators CharacterData* Get(int uid) override; diff --git a/server/clients/client_manager.cpp b/server/clients/client_manager.cpp index d2ae9bf..a04fac6 100644 --- a/server/clients/client_manager.cpp +++ b/server/clients/client_manager.cpp @@ -73,7 +73,7 @@ void ClientManager::UnloadAll() { elementMap.clear(); } -void ClientManager::UnloadIf(std::function)> fn) { +void ClientManager::UnloadIf(std::function&)> fn) { std::map::iterator it = elementMap.begin(); while (it != elementMap.end()) { if (fn(*it)) { diff --git a/server/clients/client_manager.hpp b/server/clients/client_manager.hpp index d90fb57..fbdd53a 100644 --- a/server/clients/client_manager.hpp +++ b/server/clients/client_manager.hpp @@ -45,7 +45,7 @@ public: void Unload(int uid) override; void UnloadAll() override; - void UnloadIf(std::function)> fn) override; + void UnloadIf(std::function&)> fn) override; //accessors & mutators ClientData* Get(int uid) override; diff --git a/server/doors/door_manager.cpp b/server/doors/door_manager.cpp index bf264aa..c41af3c 100644 --- a/server/doors/door_manager.cpp +++ b/server/doors/door_manager.cpp @@ -45,7 +45,7 @@ void DoorManager::UnloadAll() { //TODO } -void DoorManager::UnloadIf(std::function)> fn) { +void DoorManager::UnloadIf(std::function&)> fn) { //TODO } diff --git a/server/doors/door_manager.hpp b/server/doors/door_manager.hpp index bfed8ed..3ee59cd 100644 --- a/server/doors/door_manager.hpp +++ b/server/doors/door_manager.hpp @@ -43,7 +43,7 @@ public: void Delete(int uid) override; void UnloadAll() override; - void UnloadIf(std::function)> fn) override; + void UnloadIf(std::function&)> fn) override; //accessors & mutators DoorData* Get(int uid) override; diff --git a/server/monsters/monster_manager.cpp b/server/monsters/monster_manager.cpp index 1b2f885..1afe748 100644 --- a/server/monsters/monster_manager.cpp +++ b/server/monsters/monster_manager.cpp @@ -45,7 +45,7 @@ void MonsterManager::UnloadAll() { //TODO } -void MonsterManager::UnloadIf(std::function)> fn) { +void MonsterManager::UnloadIf(std::function&)> fn) { //TODO } diff --git a/server/monsters/monster_manager.hpp b/server/monsters/monster_manager.hpp index 5fcc56b..39d63ef 100644 --- a/server/monsters/monster_manager.hpp +++ b/server/monsters/monster_manager.hpp @@ -50,7 +50,7 @@ public: void Delete(int uid) override; void UnloadAll() override; - void UnloadIf(std::function)> fn) override; + void UnloadIf(std::function&)> fn) override; //accessors & mutators MonsterData* Get(int uid) override; diff --git a/server/rooms/room_data.cpp b/server/rooms/room_data.cpp index ae5f1b8..aaa78e3 100644 --- a/server/rooms/room_data.cpp +++ b/server/rooms/room_data.cpp @@ -21,6 +21,21 @@ */ #include "room_data.hpp" +RoomData::RoomData() { + // +} + +RoomData::RoomData(RoomData& rhs) { + roomName = std::move(rhs.roomName); + tilesetName = std::move(rhs.tilesetName); + pager = std::move(rhs.pager); + //entityList = std::move(rhs.entityList); +} + +RoomData::~RoomData() { + // +} + std::string RoomData::SetRoomName(std::string s) { return roomName = s; } @@ -42,5 +57,5 @@ RegionPagerLua* RoomData::GetPager() { } std::list* RoomData::GetEntityList() { - return &entityList; +// return &entityList; } \ No newline at end of file diff --git a/server/rooms/room_data.hpp b/server/rooms/room_data.hpp index 069e84c..bfb2e2a 100644 --- a/server/rooms/room_data.hpp +++ b/server/rooms/room_data.hpp @@ -36,8 +36,9 @@ class RoomData { public: - RoomData() = default; - ~RoomData() = default; + RoomData(); + RoomData(RoomData&); + ~RoomData(); //accessors and mutators std::string SetRoomName(std::string s); @@ -57,7 +58,7 @@ private: std::string tilesetName; RegionPagerLua pager; - std::list entityList; +// std::list entityList; }; #endif diff --git a/server/rooms/room_manager.cpp b/server/rooms/room_manager.cpp index 226a16b..5c11a36 100644 --- a/server/rooms/room_manager.cpp +++ b/server/rooms/room_manager.cpp @@ -33,7 +33,8 @@ int RoomManager::Create(std::string roomName) { std::cout << "Create-1" << std::endl; //create the room - RoomData* newRoom = &elementMap[counter]; //implicitly constructs the element + elementMap.emplace(counter); ////explicitly constructs the element + RoomData* newRoom = &(elementMap.find(counter)->second); std::cout << "Create-2" << std::endl; newRoom->SetRoomName(roomName); std::cout << "Create-3" << std::endl; @@ -59,7 +60,7 @@ void RoomManager::UnloadAll() { elementMap.clear(); } -void RoomManager::UnloadIf(std::function)> fn) { +void RoomManager::UnloadIf(std::function&)> fn) { std::map::iterator it = elementMap.begin(); while (it != elementMap.end()) { if (fn(*it)) { diff --git a/server/rooms/room_manager.hpp b/server/rooms/room_manager.hpp index 2ced715..014fff0 100644 --- a/server/rooms/room_manager.hpp +++ b/server/rooms/room_manager.hpp @@ -42,7 +42,7 @@ public: void Unload(int uid) override; void UnloadAll() override; - void UnloadIf(std::function)> fn) override; + void UnloadIf(std::function&)> fn) override; //accessors and mutators RoomData* Get(int uid) override; diff --git a/server/server_logic.cpp b/server/server_logic.cpp index df12171..33214d5 100644 --- a/server/server_logic.cpp +++ b/server/server_logic.cpp @@ -175,10 +175,10 @@ void ServerApplication::Proc() { int disconnected = clientMgr.CheckConnections(); if (disconnected != -1) { //find and unload the accounts associated with this client - accountMgr.UnloadIf([&](std::pair account) -> bool { + accountMgr.UnloadIf([&](std::pair& account) -> bool { if (account.second.GetClientIndex() == disconnected) { //find and unload the characters associated with this account - characterMgr.UnloadIf([&](std::pair character) -> bool { + characterMgr.UnloadIf([&](std::pair& character) -> bool { if (character.second.GetOwner() == account.first) { // PumpCharacterUnload(character.first); return true; diff --git a/server/server_methods.cpp b/server/server_methods.cpp index 202e075..5e8bf91 100644 --- a/server/server_methods.cpp +++ b/server/server_methods.cpp @@ -139,7 +139,7 @@ void ServerApplication::HandleLogoutRequest(ClientPacket* const argPacket) { network.SendTo(clientData->GetAddress(), static_cast(&newPacket)); //save and unload this accounts characters - characterMgr.UnloadIf([&](std::pair it) -> bool { + characterMgr.UnloadIf([&](std::pair& it) -> bool { if (argPacket->accountIndex == it.second.GetOwner()) { //pump the unload message to all remaining clients // PumpCharacterUnload(it.first); @@ -173,10 +173,10 @@ void ServerApplication::HandleDisconnectRequest(ClientPacket* const argPacket) { //TODO: need a method for this redundunt chunk of redundant code //find and unload the accounts associated with this client - accountMgr.UnloadIf([&](std::pair account) -> bool { + accountMgr.UnloadIf([&](std::pair& account) -> bool { if (account.second.GetClientIndex() == argPacket->clientIndex) { //find and unload the characters associated with this account - characterMgr.UnloadIf([&](std::pair character) -> bool { + characterMgr.UnloadIf([&](std::pair& character) -> bool { if (character.second.GetOwner() == account.first) { // PumpCharacterUnload(character.first); return true; diff --git a/server/server_utilities/manager_interface.hpp b/server/server_utilities/manager_interface.hpp index 8a5161f..97b802a 100644 --- a/server/server_utilities/manager_interface.hpp +++ b/server/server_utilities/manager_interface.hpp @@ -36,7 +36,7 @@ public: virtual void Delete(int uid) = 0; virtual void UnloadAll() = 0; - virtual void UnloadIf(std::function)> fn) = 0; + virtual void UnloadIf(std::function&)> fn) = 0; //accessors & mutators virtual T* Get(int uid) = 0;