From 045e097b139bf8746d219edf2d2fb6b0b383f3cd Mon Sep 17 00:00:00 2001 From: David Markowitz <39972741+EmosewaMC@users.noreply.github.com> Date: Mon, 8 Jun 2026 20:57:33 -0700 Subject: [PATCH] chore: cleanup zoneIM (#1985) --- dNet/ZoneInstanceManager.cpp | 43 ++++++++++-------------------------- dNet/ZoneInstanceManager.h | 17 +++++--------- 2 files changed, 18 insertions(+), 42 deletions(-) diff --git a/dNet/ZoneInstanceManager.cpp b/dNet/ZoneInstanceManager.cpp index 354d3634..3be4b9a8 100644 --- a/dNet/ZoneInstanceManager.cpp +++ b/dNet/ZoneInstanceManager.cpp @@ -1,26 +1,17 @@ -#define _VARIADIC_MAX 10 #include "ZoneInstanceManager.h" // Custom Classes #include "MasterPackets.h" -#include "dServer.h" - -// C++ -#include // Static Variables ZoneInstanceManager* ZoneInstanceManager::m_Address = nullptr; //! Requests a zone transfer -void ZoneInstanceManager::RequestZoneTransfer(dServer* server, uint32_t zoneID, uint32_t zoneClone, bool mythranShift, std::function callback) { +void ZoneInstanceManager::RequestZoneTransfer(dServer* server, uint32_t zoneID, uint32_t zoneClone, bool mythranShift, TransferCallback callback) { + const auto nextID = ++currentRequestID; + requests[nextID] = callback; - ZoneTransferRequest* request = new ZoneTransferRequest(); - request->requestID = ++currentRequestID; - request->callback = callback; - - this->requests.push_back(request); - - MasterPackets::SendZoneTransferRequest(server, request->requestID, mythranShift, zoneID, zoneClone); + MasterPackets::SendZoneTransferRequest(server, nextID, mythranShift, zoneID, zoneClone); } //! Handles a zone transfer response @@ -43,18 +34,11 @@ void ZoneInstanceManager::HandleRequestZoneTransferResponse(Packet* packet) { LUString serverIP(255); inStream.Read(serverIP); - for (uint32_t i = 0; i < this->requests.size(); ++i) { - if (this->requests[i]->requestID == requestID) { - - // Call the request callback - this->requests[i]->callback(mythranShift, zoneID, zoneInstance, zoneClone, serverIP.string, serverPort); - - delete this->requests[i]; - this->requests.erase(this->requests.begin() + i); - return; - } + const auto entry = requests.find(requestID); + if (entry != requests.end()) { + entry->second(mythranShift, zoneID, zoneInstance, zoneClone, serverIP.string, serverPort); + requests.erase(entry); } - } void ZoneInstanceManager::CreatePrivateZone(dServer* server, uint32_t zoneID, uint32_t zoneClone, const std::string& password) { @@ -65,12 +49,9 @@ void ZoneInstanceManager::RequestPrivateZone( dServer* server, bool mythranShift, const std::string& password, - std::function callback) { - ZoneTransferRequest* request = new ZoneTransferRequest(); - request->requestID = ++currentRequestID; - request->callback = callback; + TransferCallback callback) { + const auto nextID = ++currentRequestID; + requests[nextID] = callback; - this->requests.push_back(request); - - MasterPackets::SendZoneRequestPrivate(server, request->requestID, mythranShift, password); + MasterPackets::SendZoneRequestPrivate(server, nextID, mythranShift, password); } diff --git a/dNet/ZoneInstanceManager.h b/dNet/ZoneInstanceManager.h index 47080cde..b47f92e2 100644 --- a/dNet/ZoneInstanceManager.h +++ b/dNet/ZoneInstanceManager.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -14,25 +15,20 @@ class dServer; \brief A class for handling zone transfers and zone-related functions */ - //! The zone request -struct ZoneTransferRequest { - uint64_t requestID; - std::function callback; -}; - //! The zone manager class ZoneInstanceManager { private: static ZoneInstanceManager* m_Address; //!< The singleton instance - std::vector requests; //!< The zone transfer requests + using TransferCallback = std::function; + std::map requests; //!< The zone transfer requests uint64_t currentRequestID; //!< The current request ID public: //! The singleton method static ZoneInstanceManager* Instance() { - if (m_Address == 0) { + if (m_Address == nullptr) { m_Address = new ZoneInstanceManager; m_Address->currentRequestID = 0; } @@ -47,7 +43,7 @@ public: \param mythranShift Whether or not this is a mythran shift \param callback The callback function */ - void RequestZoneTransfer(dServer* server, uint32_t zoneID, uint32_t zoneClone, bool mythranShift, std::function callback); + void RequestZoneTransfer(dServer* server, uint32_t zoneID, uint32_t zoneClone, bool mythranShift, TransferCallback callback); //! Handles a zone transfer response /*! @@ -58,6 +54,5 @@ public: void CreatePrivateZone(dServer* server, uint32_t zoneID, uint32_t zoneClone, const std::string& password); - void RequestPrivateZone(dServer* server, bool mythranShift, const std::string& password, std::function callback); - + void RequestPrivateZone(dServer* server, bool mythranShift, const std::string& password, TransferCallback callback); };