From 4ef84b30002726bddaffd59e269262be2fadf137 Mon Sep 17 00:00:00 2001 From: insunaa Date: Fri, 28 Feb 2025 15:36:45 +0100 Subject: [PATCH] Boost: Migrate deprecated components to 1.87 --- src/game/Server/WorldSocket.cpp | 2 +- src/game/Server/WorldSocket.h | 2 +- src/mangosd/Master.cpp | 12 +++++----- src/mangosd/Master.h | 4 ++-- src/mangosd/RASocket.cpp | 4 ++-- src/mangosd/RASocket.h | 2 +- src/realmd/AuthSocket.cpp | 4 ++-- src/realmd/AuthSocket.h | 2 +- src/realmd/Main.cpp | 8 +++---- src/shared/Metric/Metric.cpp | 34 +++++++++++++++------------- src/shared/Metric/Metric.h | 8 +++---- src/shared/Network/AsyncListener.hpp | 6 ++--- src/shared/Network/AsyncSocket.hpp | 4 ++-- src/shared/Util/Util.cpp | 2 +- 14 files changed, 48 insertions(+), 46 deletions(-) diff --git a/src/game/Server/WorldSocket.cpp b/src/game/Server/WorldSocket.cpp index 497b6ed02f..ae6ee6943e 100644 --- a/src/game/Server/WorldSocket.cpp +++ b/src/game/Server/WorldSocket.cpp @@ -92,7 +92,7 @@ std::deque WorldSocket::GetIncOpcodeHistory() return m_opcodeHistoryInc; } -WorldSocket::WorldSocket(boost::asio::io_service& service) : AsyncSocket(service), m_lastPingTime(std::chrono::system_clock::time_point::min()), m_overSpeedPings(0), +WorldSocket::WorldSocket(boost::asio::io_context& context) : AsyncSocket(context), m_lastPingTime(std::chrono::system_clock::time_point::min()), m_overSpeedPings(0), m_session(nullptr), m_seed(urand()), m_loggingPackets(false) { } diff --git a/src/game/Server/WorldSocket.h b/src/game/Server/WorldSocket.h index 3f77603c61..09d696fe52 100644 --- a/src/game/Server/WorldSocket.h +++ b/src/game/Server/WorldSocket.h @@ -126,7 +126,7 @@ class WorldSocket : public MaNGOS::AsyncSocket bool m_loggingPackets; public: - WorldSocket(boost::asio::io_service& service); + WorldSocket(boost::asio::io_context& context); // send a packet \o/ void SendPacket(const WorldPacket& pct, bool immediate = false); diff --git a/src/mangosd/Master.cpp b/src/mangosd/Master.cpp index a8334d7b2c..efeb66ecff 100644 --- a/src/mangosd/Master.cpp +++ b/src/mangosd/Master.cpp @@ -227,11 +227,11 @@ int Master::Run() } std::string bindIp = sConfig.GetStringDefault("BindIP", "0.0.0.0"); int32 port = int32(sWorld.getConfig(CONFIG_UINT32_PORT_WORLD)); - MaNGOS::AsyncListener listener(m_service, bindIp, port); + MaNGOS::AsyncListener listener(m_context, bindIp, port); std::vector threads; for (int32 i = 0; i < networkThreadCount; ++i) - threads.emplace_back([&]() { m_service.run(); }); + threads.emplace_back([&]() { m_context.run(); }); std::unique_ptr> raListener; std::string raBindIp = sConfig.GetStringDefault("Ra.IP", "0.0.0.0"); @@ -240,8 +240,8 @@ int Master::Run() bool raEnable = sConfig.GetBoolDefault("Ra.Enable", false); if (raEnable) { - raListener.reset(new MaNGOS::AsyncListener(m_raService, raBindIp, raPort)); - m_raThread = std::thread([this]() { m_raService.run(); }); + raListener.reset(new MaNGOS::AsyncListener(m_raContext, raBindIp, raPort)); + m_raThread = std::thread([this]() { m_raContext.run(); }); } std::unique_ptr soapThread; @@ -254,11 +254,11 @@ int Master::Run() world_thread.wait(); - m_service.stop(); + m_context.stop(); if (raEnable) { - m_raService.stop(); + m_raContext.stop(); m_raThread.join(); } diff --git a/src/mangosd/Master.h b/src/mangosd/Master.h index 091ff379ac..2603011eaa 100644 --- a/src/mangosd/Master.h +++ b/src/mangosd/Master.h @@ -44,8 +44,8 @@ class Master void clearOnlineAccounts(); - boost::asio::io_service m_service; - boost::asio::io_service m_raService; + boost::asio::io_context m_context; + boost::asio::io_context m_raContext; }; #define sMaster MaNGOS::Singleton::Instance() diff --git a/src/mangosd/RASocket.cpp b/src/mangosd/RASocket.cpp index 1c7248050c..66b6a63dda 100644 --- a/src/mangosd/RASocket.cpp +++ b/src/mangosd/RASocket.cpp @@ -37,8 +37,8 @@ #include /// RASocket constructor -RASocket::RASocket(boost::asio::io_service& service) : - MaNGOS::AsyncSocket(service), m_secure(sConfig.GetBoolDefault("RA.Secure", true)), +RASocket::RASocket(boost::asio::io_context& context) : + MaNGOS::AsyncSocket(context), m_secure(sConfig.GetBoolDefault("RA.Secure", true)), m_authLevel(AuthLevel::None), m_accountLevel(AccountTypes::SEC_PLAYER), m_accountId(0) { if (sConfig.IsSet("RA.Stricted")) diff --git a/src/mangosd/RASocket.h b/src/mangosd/RASocket.h index 6b6a40c99e..4d9c90a46f 100644 --- a/src/mangosd/RASocket.h +++ b/src/mangosd/RASocket.h @@ -56,7 +56,7 @@ class RASocket : public MaNGOS::AsyncSocket void Send(const std::string& message); public: - RASocket(boost::asio::io_service& service); + RASocket(boost::asio::io_context& context); virtual ~RASocket(); bool OnOpen() override; diff --git a/src/realmd/AuthSocket.cpp b/src/realmd/AuthSocket.cpp index 4f6016fb36..4c9ccacbf4 100644 --- a/src/realmd/AuthSocket.cpp +++ b/src/realmd/AuthSocket.cpp @@ -191,8 +191,8 @@ const char logonProofVersionInvalid[2] = { CMD_AUTH_LOGON_PROOF, AUTH_LOGON_FAIL const char logonProofUnknownAccountPinInvalid[4] = { CMD_AUTH_LOGON_PROOF, AUTH_LOGON_FAILED_UNKNOWN_ACCOUNT, 3, 0 }; /// Constructor - set the N and g values for SRP6 -AuthSocket::AuthSocket(boost::asio::io_service& service) - : AsyncSocket(service), _status(STATUS_CHALLENGE), _build(0), _accountSecurityLevel(SEC_PLAYER), m_timeoutTimer(service) +AuthSocket::AuthSocket(boost::asio::io_context& context) + : AsyncSocket(context), _status(STATUS_CHALLENGE), _build(0), _accountSecurityLevel(SEC_PLAYER), m_timeoutTimer(context) { } diff --git a/src/realmd/AuthSocket.h b/src/realmd/AuthSocket.h index 54bc5d8173..ea5ce1589e 100644 --- a/src/realmd/AuthSocket.h +++ b/src/realmd/AuthSocket.h @@ -45,7 +45,7 @@ class AuthSocket : public MaNGOS::AsyncSocket public: const static int s_BYTE_SIZE = 32; - AuthSocket(boost::asio::io_service& service); + AuthSocket(boost::asio::io_context& context); bool OnOpen() override; diff --git a/src/realmd/Main.cpp b/src/realmd/Main.cpp index 5a200d2ffa..b74c56b654 100644 --- a/src/realmd/Main.cpp +++ b/src/realmd/Main.cpp @@ -73,7 +73,7 @@ bool restart = false; DatabaseType LoginDatabase; // Accessor to the realm server database -boost::asio::io_service service; +boost::asio::io_context context; // Launch the realm server int main(int argc, char* argv[]) @@ -239,14 +239,14 @@ int main(int argc, char* argv[]) LoginDatabase.CommitTransaction(); uint32 networkThreadCount = sConfig.GetIntDefault("ListenerThreads", 1); - MaNGOS::AsyncListener listener(service, + MaNGOS::AsyncListener listener(context, sConfig.GetStringDefault("BindIP", "0.0.0.0"), sConfig.GetIntDefault("RealmServerPort", DEFAULT_REALMSERVER_PORT) ); std::vector threads; for (uint32 i = 0; i < networkThreadCount; ++i) - threads.emplace_back([&]() { service.run(); }); + threads.emplace_back([&]() { context.run(); }); // Catch termination signals HookSignals(); @@ -320,7 +320,7 @@ int main(int argc, char* argv[]) #endif } - service.stop(); + context.stop(); for (uint32 i = 0; i < networkThreadCount; ++i) threads[i].join(); diff --git a/src/shared/Metric/Metric.cpp b/src/shared/Metric/Metric.cpp index ac0d75767d..d64c442f64 100644 --- a/src/shared/Metric/Metric.cpp +++ b/src/shared/Metric/Metric.cpp @@ -84,12 +84,15 @@ metric::metric::~metric() if (!m_enabled) return; - m_writeService.post([&] { + boost::asio::post(m_writeContext, [&] { m_sendTimer->cancel(); }); - m_queueServiceWork.reset(); - m_writeServiceWork.reset(); + m_queueContextWork.get()->reset(); + m_writeContextWork.get()->reset(); + + m_queueContextWork.reset(); + m_writeContextWork.reset(); m_queueServiceThread.join(); m_writeServiceThread.join(); @@ -108,17 +111,17 @@ void metric::metric::initialize() sConfig.GetStringDefault("Metric.Password", "") }; - m_sendTimer.reset(new boost::asio::deadline_timer(m_writeService)); - m_queueServiceWork.reset(new boost::asio::io_service::work(m_queueService)); - m_writeServiceWork.reset(new boost::asio::io_service::work(m_writeService)); + m_sendTimer.reset(new boost::asio::deadline_timer(m_writeContext)); + m_queueContextWork = std::make_unique>(boost::asio::make_work_guard(m_queueContext)); + m_writeContextWork = std::make_unique>(boost::asio::make_work_guard(m_writeContext)); // Start up service thread that will process all queued tasks m_queueServiceThread = std::thread([&] { - m_queueService.run(); + m_queueContext.run(); }); m_writeServiceThread = std::thread([&] { - m_writeService.run(); + m_writeContext.run(); }); schedule_timer(); @@ -137,8 +140,7 @@ void metric::metric::reload_config() initialize(); return; } - - m_writeService.post([&] + boost::asio::post(m_writeContext, [&] { m_connectionInfo = { sConfig.GetStringDefault("Metric.Address", "127.0.0.1"), @@ -160,7 +162,7 @@ void metric::metric::report(std::string measurement, std::map guard(m_queueWriteLock); m_measurementQueue.push_back(std::make_unique(measurement, tags, fields)); @@ -209,9 +211,9 @@ void metric::metric::send() boost::system::error_code error; // Hostname resolution - tcp::resolver resolver(m_writeService); - tcp::resolver::query query(m_connectionInfo.hostname, std::to_string(m_connectionInfo.port)); - tcp::resolver::iterator endpoint_iterator = resolver.resolve(query, error); + tcp::resolver resolver(m_writeContext); + auto endpoints = resolver.resolve(m_connectionInfo.hostname, std::to_string(m_connectionInfo.port), error); + auto endpoint_iterator = endpoints.begin(); if (error) { @@ -221,9 +223,9 @@ void metric::metric::send() error = boost::asio::error::host_not_found; - tcp::resolver::iterator end; + auto end = endpoints.end(); - tcp::socket socket(m_writeService); + tcp::socket socket(m_writeContext); while (error && endpoint_iterator != end) { socket.close(); diff --git a/src/shared/Metric/Metric.h b/src/shared/Metric/Metric.h index a1ce1b2182..6a9f82f40d 100644 --- a/src/shared/Metric/Metric.h +++ b/src/shared/Metric/Metric.h @@ -120,12 +120,12 @@ namespace metric void report(std::string measurement, std::map fields, std::map tags = {}); private: - boost::asio::io_service m_queueService; - boost::asio::io_service m_writeService; + boost::asio::io_context m_queueContext; + boost::asio::io_context m_writeContext; std::unique_ptr m_sendTimer; - std::unique_ptr m_queueServiceWork; - std::unique_ptr m_writeServiceWork; + std::unique_ptr> m_queueContextWork; + std::unique_ptr> m_writeContextWork; std::thread m_queueServiceThread; std::thread m_writeServiceThread; diff --git a/src/shared/Network/AsyncListener.hpp b/src/shared/Network/AsyncListener.hpp index 526c127669..a395d42e21 100644 --- a/src/shared/Network/AsyncListener.hpp +++ b/src/shared/Network/AsyncListener.hpp @@ -31,7 +31,7 @@ namespace MaNGOS { public: // constructor for accepting connection from client - AsyncListener(boost::asio::io_service& io_service, std::string const& bindIp, unsigned short port) : m_service(io_service), m_acceptor(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(bindIp), port)) + AsyncListener(boost::asio::io_context& io_context, std::string const& bindIp, unsigned short port) : m_context(io_context), m_acceptor(io_context, boost::asio::ip::tcp::endpoint(boost::asio::ip::make_address(bindIp), port)) { startAccept(); } @@ -43,12 +43,12 @@ namespace MaNGOS startAccept(); } private: - boost::asio::io_service& m_service; + boost::asio::io_context& m_context; boost::asio::ip::tcp::acceptor m_acceptor; void startAccept() { // socket - std::shared_ptr connection = std::make_shared(m_service); + std::shared_ptr connection = std::make_shared(m_context); // asynchronous accept operation and wait for a new connection. m_acceptor.async_accept(connection->GetAsioSocket(), boost::bind(&AsyncListener::HandleAccept, this, connection, boost::asio::placeholders::error)); diff --git a/src/shared/Network/AsyncSocket.hpp b/src/shared/Network/AsyncSocket.hpp index 6f7dac9018..4e4adbc06d 100644 --- a/src/shared/Network/AsyncSocket.hpp +++ b/src/shared/Network/AsyncSocket.hpp @@ -32,7 +32,7 @@ namespace MaNGOS class AsyncSocket : public std::enable_shared_from_this { public: - AsyncSocket(boost::asio::io_service& io_service); + AsyncSocket(boost::asio::io_context& io_context); virtual ~AsyncSocket(); void Read(char* buffer, size_t length, std::function&& callback); @@ -74,7 +74,7 @@ namespace MaNGOS }; template - MaNGOS::AsyncSocket::AsyncSocket(boost::asio::io_service& io_service) : m_socket(io_service), m_address("0.0.0.0"), + MaNGOS::AsyncSocket::AsyncSocket(boost::asio::io_context& io_context) : m_socket(io_context), m_address("0.0.0.0"), m_remoteAddress(boost::asio::ip::address()), m_remotePort(0) { diff --git a/src/shared/Util/Util.cpp b/src/shared/Util/Util.cpp index 944442043a..fc451e3841 100644 --- a/src/shared/Util/Util.cpp +++ b/src/shared/Util/Util.cpp @@ -303,7 +303,7 @@ bool IsIPAddress(char const* ipaddress) // Let the big boys do it. // Drawback: all valid ip address formats are recognized e.g.: 12.23,121234,0xABCD) boost::system::error_code ec; - boost::asio::ip::address::from_string(ipaddress, ec); + boost::asio::ip::make_address(ipaddress, ec); return ec.value() == 0; }