diff --git a/world/client.cpp b/world/client.cpp index b281c9080..656cc1998 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -90,7 +90,6 @@ std::vector character_create_allocations; std::vector character_create_race_class_combos; extern ZSList zoneserver_list; -extern LoginServerList loginserverlist; extern ClientList client_list; extern uint32 numclients; extern volatile bool RunLoops; @@ -518,7 +517,7 @@ bool Client::HandleSendLoginInfoPacket(const EQApplicationPacket *app) ServerLSPlayerJoinWorld_Struct* join =(ServerLSPlayerJoinWorld_Struct*)pack->pBuffer; strcpy(join->key,GetLSKey()); join->lsaccount_id = GetLSID(); - loginserverlist.SendPacket(pack); + LoginServerList::Instance()->SendPacket(pack); safe_delete(pack); } @@ -1250,7 +1249,7 @@ bool Client::Process() { ServerLSPlayerLeftWorld_Struct* logout =(ServerLSPlayerLeftWorld_Struct*)pack->pBuffer; strcpy(logout->key,GetLSKey()); logout->lsaccount_id = GetLSID(); - loginserverlist.SendPacket(pack); + LoginServerList::Instance()->SendPacket(pack); safe_delete(pack); } LogInfo("Client disconnected (not active in process)"); diff --git a/world/cliententry.cpp b/world/cliententry.cpp index f0b464ed1..3de11c4df 100644 --- a/world/cliententry.cpp +++ b/world/cliententry.cpp @@ -9,7 +9,6 @@ #include "world_config.h" extern uint32 numplayers; -extern LoginServerList loginserverlist; extern ClientList client_list; extern volatile bool RunLoops; extern SharedTaskManager shared_task_manager; @@ -146,7 +145,7 @@ void ClientListEntry::LSUpdate(ZoneServer *iZS) zone->count = iZS->NumPlayers(); zone->zone = iZS->GetZoneID(); zone->zone_wid = iZS->GetID(); - loginserverlist.SendPacket(pack); + LoginServerList::Instance()->SendPacket(pack); safe_delete(pack); } } @@ -162,7 +161,7 @@ void ClientListEntry::LSZoneChange(ZoneToZone_Struct *ztz) zonechange->lsaccount_id = LSID(); zonechange->from = ztz->current_zone_id; zonechange->to = ztz->requested_zone_id; - loginserverlist.SendPacket(pack); + LoginServerList::Instance()->SendPacket(pack); safe_delete(pack); } } diff --git a/world/console.cpp b/world/console.cpp index 599bb8125..9cc95134d 100644 --- a/world/console.cpp +++ b/world/console.cpp @@ -35,7 +35,6 @@ extern ClientList client_list; extern ZSList zoneserver_list; -extern LoginServerList loginserverlist; /** * @param username @@ -534,8 +533,8 @@ void ConsoleLock( ) { WorldConfig::LockWorld(); - if (loginserverlist.Connected()) { - loginserverlist.SendStatus(); + if (LoginServerList::Instance()->Connected()) { + LoginServerList::Instance()->SendStatus(); connection->SendLine("World locked."); } else { @@ -555,8 +554,8 @@ void ConsoleUnlock( ) { WorldConfig::UnlockWorld(); - if (loginserverlist.Connected()) { - loginserverlist.SendStatus(); + if (LoginServerList::Instance()->Connected()) { + LoginServerList::Instance()->SendStatus(); connection->SendLine("World unlocked."); } else { diff --git a/world/eqw.cpp b/world/eqw.cpp index 1a7e6c147..ba316b680 100644 --- a/world/eqw.cpp +++ b/world/eqw.cpp @@ -48,7 +48,6 @@ extern ZSList zoneserver_list; extern ClientList client_list; extern uint32 numzones; -extern LoginServerList loginserverlist; extern LauncherList launcher_list; extern volatile bool RunLoops; @@ -86,15 +85,15 @@ const std::string &EQW::GetOutput() const { void EQW::LockWorld() { WorldConfig::LockWorld(); - if (loginserverlist.Connected()) { - loginserverlist.SendStatus(); + if (LoginServerList::Instance()->Connected()) { + LoginServerList::Instance()->SendStatus(); } } void EQW::UnlockWorld() { WorldConfig::UnlockWorld(); - if (loginserverlist.Connected()) { - loginserverlist.SendStatus(); + if (LoginServerList::Instance()->Connected()) { + LoginServerList::Instance()->SendStatus(); } } @@ -104,7 +103,7 @@ Const_char *EQW::GetConfig(Const_char *var_name) { } bool EQW::LSConnected() { - return(loginserverlist.Connected()); + return(LoginServerList::Instance()->Connected()); } int EQW::CountZones() { diff --git a/world/login_server_list.cpp b/world/login_server_list.cpp index 30285c72a..8f4cd0eee 100644 --- a/world/login_server_list.cpp +++ b/world/login_server_list.cpp @@ -37,7 +37,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "world_config.h" extern ZSList zoneserver_list; -extern LoginServerList loginserverlist; extern ClientList client_list; extern uint32 numzones; extern uint32 numplayers; diff --git a/world/login_server_list.h b/world/login_server_list.h index d9a270e55..54de20bef 100644 --- a/world/login_server_list.h +++ b/world/login_server_list.h @@ -21,6 +21,13 @@ public: bool SendAccountUpdate(ServerPacket *pack); bool Connected(); size_t GetServerCount() const { return m_list.size(); } + + static LoginServerList* Instance() + { + static LoginServerList instance; + return &instance; + } + protected: std::list> m_list; }; diff --git a/world/main.cpp b/world/main.cpp index bcd7c0737..b15f03882 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -94,7 +94,6 @@ ClientList client_list; GroupLFPList LFPGroupList; ZSList zoneserver_list; -LoginServerList loginserverlist; UCSConnection UCSLink; QueryServConnection QSLink; LauncherList launcher_list; diff --git a/world/web_interface_eqw.cpp b/world/web_interface_eqw.cpp index ad0cf6953..832f8e8c6 100644 --- a/world/web_interface_eqw.cpp +++ b/world/web_interface_eqw.cpp @@ -6,7 +6,6 @@ #include "zonelist.h" #include "launcher_list.h" -extern LoginServerList loginserverlist; extern ClientList client_list; extern ZSList zoneserver_list; extern LauncherList launcher_list; @@ -33,8 +32,8 @@ void EQW__IsLocked(WebInterface *i, const std::string& method, const std::string void EQW__Lock(WebInterface *i, const std::string& method, const std::string& id, const Json::Value& params) { WorldConfig::LockWorld(); - if (loginserverlist.Connected()) { - loginserverlist.SendStatus(); + if (LoginServerList::Instance()->Connected()) { + LoginServerList::Instance()->SendStatus(); } Json::Value ret; @@ -44,8 +43,8 @@ void EQW__Lock(WebInterface *i, const std::string& method, const std::string& id void EQW__Unlock(WebInterface *i, const std::string& method, const std::string& id, const Json::Value& params) { WorldConfig::UnlockWorld(); - if (loginserverlist.Connected()) { - loginserverlist.SendStatus(); + if (LoginServerList::Instance()->Connected()) { + LoginServerList::Instance()->SendStatus(); } Json::Value ret; @@ -69,7 +68,7 @@ void EQW__GetLauncherCount(WebInterface *i, const std::string& method, const std } void EQW__GetLoginServerCount(WebInterface *i, const std::string& method, const std::string& id, const Json::Value& params) { - Json::Value ret = loginserverlist.GetServerCount(); + Json::Value ret = LoginServerList::Instance()->GetServerCount(); i->SendResponse(id, ret); } diff --git a/world/world_boot.cpp b/world/world_boot.cpp index 0bf727a02..cb00e7ab9 100644 --- a/world/world_boot.cpp +++ b/world/world_boot.cpp @@ -183,15 +183,13 @@ int get_file_size(const std::string &filename) // path to file return size; } -extern LoginServerList loginserverlist; - void WorldBoot::RegisterLoginservers() { const auto c = EQEmuConfig::get(); if (c->LoginCount == 0) { if (c->LoginHost.length()) { - loginserverlist.Add( + LoginServerList::Instance()->Add( c->LoginHost.c_str(), c->LoginPort, c->LoginAccount.c_str(), @@ -207,7 +205,7 @@ void WorldBoot::RegisterLoginservers() iterator.Reset(); while (iterator.MoreElements()) { if (iterator.GetData()->LoginHost.length()) { - loginserverlist.Add( + LoginServerList::Instance()->Add( iterator.GetData()->LoginHost.c_str(), iterator.GetData()->LoginPort, iterator.GetData()->LoginAccount.c_str(), diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index 93500ecf6..c1dc460a7 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -55,7 +55,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA extern ClientList client_list; extern GroupLFPList LFPGroupList; extern ZSList zoneserver_list; -extern LoginServerList loginserverlist; extern volatile bool RunLoops; extern volatile bool UCSServerAvailable_; extern AdventureManager adventure_manager; @@ -164,7 +163,7 @@ void ZoneServer::LSBootUpdate(uint32 zone_id, uint32 instanceid, bool startup) { bootup->zone = zone_id; bootup->zone_wid = GetID(); bootup->instance = instanceid; - loginserverlist.SendPacket(pack); + LoginServerList::Instance()->SendPacket(pack); safe_delete(pack); } } @@ -179,7 +178,7 @@ void ZoneServer::LSSleepUpdate(uint32 zone_id) { auto sleep = (ServerLSZoneSleep_Struct*) pack->pBuffer; sleep->zone = zone_id; sleep->zone_wid = GetID(); - loginserverlist.SendPacket(pack); + LoginServerList::Instance()->SendPacket(pack); safe_delete(pack); } } @@ -1076,8 +1075,8 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { WorldConfig::UnlockWorld(); } - if (loginserverlist.Connected()) { - loginserverlist.SendStatus(); + if (LoginServerList::Instance()->Connected()) { + LoginServerList::Instance()->SendStatus(); SendEmoteMessage( l->character_name, 0, @@ -1339,7 +1338,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { } case ServerOP_LSAccountUpdate: { LogNetcode("Received ServerOP_LSAccountUpdate packet from zone"); - loginserverlist.SendAccountUpdate(pack); + LoginServerList::Instance()->SendAccountUpdate(pack); break; } case ServerOP_DiscordWebhookMessage: