From 4aa991e7e4450232df4ceda0b2f439bccce1d260 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 8 Apr 2025 19:15:16 +0200 Subject: Core/Network: Socket refactors * Devirtualize calls to Read and Update by marking concrete implementations as final * Removed derived class template argument * Specialize boost::asio::basic_stream_socket for boost::asio::io_context instead of type-erased any_io_executor * Make socket initialization easier composable (before entering Read loop) * Remove use of deprecated boost::asio::null_buffers and boost::beast::ssl_stream (cherry picked from commit e8b2be3527c7683e8bfca70ed7706fc20da566fd) --- src/server/worldserver/Main.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'src/server/worldserver/Main.cpp') diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index a482d109890..ba5c8f9c758 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -15,10 +15,6 @@ * with this program. If not, see . */ -/// \addtogroup Trinityd Trinity Daemon -/// @{ -/// \file - #include "Common.h" #include "AppenderDB.h" #include "AsyncAcceptor.h" @@ -122,7 +118,7 @@ private: }; void SignalHandler(boost::system::error_code const& error, int signalNumber); -AsyncAcceptor* StartRaSocketAcceptor(Trinity::Asio::IoContext& ioContext); +std::unique_ptr StartRaSocketAcceptor(Trinity::Asio::IoContext& ioContext); bool StartDB(); void StopDB(); void WorldUpdateLoop(); @@ -372,9 +368,9 @@ int main(int argc, char** argv) auto battlegroundMgrHandle = Trinity::make_unique_ptr_with_deleter<&BattlegroundMgr::DeleteAllBattlegrounds>(sBattlegroundMgr); // Start the Remote Access port (acceptor) if enabled - std::unique_ptr raAcceptor; + std::unique_ptr raAcceptor; if (sConfigMgr->GetBoolDefault("Ra.Enable", false)) - raAcceptor.reset(StartRaSocketAcceptor(*ioContext)); + raAcceptor = StartRaSocketAcceptor(*ioContext); // Start soap serving thread if enabled std::unique_ptr soapThread; @@ -632,20 +628,23 @@ void FreezeDetector::Handler(std::weak_ptr freezeDetectorRef, bo } } -AsyncAcceptor* StartRaSocketAcceptor(Trinity::Asio::IoContext& ioContext) +std::unique_ptr StartRaSocketAcceptor(Trinity::Asio::IoContext& ioContext) { uint16 raPort = uint16(sConfigMgr->GetIntDefault("Ra.Port", 3443)); std::string raListener = sConfigMgr->GetStringDefault("Ra.IP", "0.0.0.0"); - AsyncAcceptor* acceptor = new AsyncAcceptor(ioContext, raListener, raPort); + std::unique_ptr acceptor = std::make_unique(ioContext, raListener, raPort); if (!acceptor->Bind()) { TC_LOG_ERROR("server.worldserver", "Failed to bind RA socket acceptor"); - delete acceptor; return nullptr; } - acceptor->AsyncAccept(); + acceptor->AsyncAccept([](Trinity::Net::IoContextTcpSocket&& sock, uint32 /*threadIndex*/) + { + std::make_shared(std::move(sock))->Start(); + + }); return acceptor; } @@ -696,7 +695,6 @@ void ClearOnlineAccounts(uint32 realmId) // Battleground instance ids reset at server restart CharacterDatabase.DirectExecute("UPDATE character_battleground_data SET instanceId = 0"); } -/// @} variables_map GetConsoleArguments(int argc, char** argv, fs::path& configFile, fs::path& configDir, [[maybe_unused]] std::string& winServiceAction) { -- cgit v1.2.3