From 82bea97ff2aa07aaa5e0e4ef5f82f19eeae63845 Mon Sep 17 00:00:00 2001 From: Emagi Date: Mon, 2 Dec 2024 19:03:13 -0500 Subject: [PATCH] address peer listing having multiple of the same addresses (So we can just list all in the same server_config instead of many dirs with their own server_config) --- source/WorldServer/World.cpp | 15 +++++++++------ source/WorldServer/net.cpp | 2 +- source/WorldServer/net.h | 8 ++++++-- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/source/WorldServer/World.cpp b/source/WorldServer/World.cpp index 520403c..714aed5 100644 --- a/source/WorldServer/World.cpp +++ b/source/WorldServer/World.cpp @@ -290,15 +290,18 @@ void World::init(std::string web_ipaddr, int16 web_port, std::string cert_file, return; } try { - std::map peers = net.GetWebPeers(); - std::map::iterator peer_itr; - if(peers.size() > 0) { + std::multimap peers = net.GetWebPeers(); + std::multimap::iterator peer_itr; + if (!peers.empty()) { net.is_primary = false; - for(peer_itr = peers.begin(); peer_itr != peers.end(); peer_itr++) { - if(net.GetWebWorldAddress() == peer_itr->first && net.GetWebWorldPort() == peer_itr->second) - continue; // no good you can't add yourself + for (peer_itr = peers.begin(); peer_itr != peers.end(); ++peer_itr) { + if (net.GetWebWorldAddress() == peer_itr->first && net.GetWebWorldPort() == peer_itr->second) { + continue; // no good, you can't add yourself + } + std::string portNum = std::to_string(peer_itr->second); std::string peerName = "eq2emu_" + peer_itr->first + "_" + portNum; + peer_manager.addPeer(peerName, PeeringStatus::SECONDARY, "", "", 0, peer_itr->first, peer_itr->second); peer_https_pool.addPeerClient(peerName, peer_itr->first, std::to_string(peer_itr->second), "/addpeer"); } diff --git a/source/WorldServer/net.cpp b/source/WorldServer/net.cpp index 57a589e..6684319 100644 --- a/source/WorldServer/net.cpp +++ b/source/WorldServer/net.cpp @@ -779,7 +779,7 @@ bool NetConnection::ReadLoginINI(int argc, char** argv) { int16 port = 0; parser.convertStringToUnsignedShort(web_peerport, port); if(port > 0) { - web_peers[web_peeraddress] = port; + web_peers.insert({web_peeraddress, port}); LogWrite(INIT__INFO, 0, "Init", "Adding peer %s:%u...", web_peeraddress.c_str(), port); } else { diff --git a/source/WorldServer/net.h b/source/WorldServer/net.h index e66872d..99739a4 100644 --- a/source/WorldServer/net.h +++ b/source/WorldServer/net.h @@ -96,7 +96,11 @@ public: std::string GetWebHardcodePassword() { return web_hardcodepassword; } std::string GetCmdUser() { return web_cmduser; } std::string GetCmdPassword() { return web_cmdpassword; } - std::map GetWebPeers() { std::map copied_map(web_peers); return copied_map; } + std::multimap GetWebPeers() { + // Create a copy of the existing multimap + std::multimap copied_map(web_peers); + return copied_map; + } int16 GetPeerPriority() { return web_peerpriority; } bool world_locked; std::atomic is_primary; @@ -119,7 +123,7 @@ private: std::string web_hardcodepassword; std::string web_cmduser; std::string web_cmdpassword; - std::map web_peers; + std::multimap web_peers; int16 web_worldport; int16 web_peerpriority;