diff options
| author | Shauren <shauren.trinity@gmail.com> | 2025-05-08 14:30:42 +0200 |
|---|---|---|
| committer | Ovahlord <dreadkiller@gmx.de> | 2025-05-11 11:46:58 +0200 |
| commit | f55d6c5fa0147eaea0a8fca316d93fd0b75d8b51 (patch) | |
| tree | fb72b1a46bfd2b57dde764ffaf4a70459ba36553 /src/server/game/World | |
| parent | 412c5416f9406548c5b59569fbbcf47438f72f07 (diff) | |
Core/World: Move linking instance socket to WorldSession
(cherry picked from commit cb837ce926d6a8c13d5f74faea246fea19db91d0)
Diffstat (limited to 'src/server/game/World')
| -rw-r--r-- | src/server/game/World/World.cpp | 38 | ||||
| -rw-r--r-- | src/server/game/World/World.h | 1 |
2 files changed, 9 insertions, 30 deletions
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 2e881abccc3..78e113aab48 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -103,7 +103,6 @@ #include "WeatherMgr.h" #include "WhoListStorage.h" #include "WorldSession.h" -#include "WorldSocket.h" #include "WorldStateMgr.h" TC_GAME_API std::atomic<bool> World::m_stopEvent(false); @@ -439,30 +438,6 @@ void World::AddSession_(WorldSession* s) } } -void World::ProcessLinkInstanceSocket(std::pair<std::weak_ptr<WorldSocket>, uint64> linkInfo) -{ - if (std::shared_ptr<WorldSocket> sock = linkInfo.first.lock()) - { - if (!sock->IsOpen()) - return; - - WorldSession::ConnectToKey key; - key.Raw = linkInfo.second; - - WorldSession* session = FindSession(uint32(key.Fields.AccountId)); - if (!session || session->GetConnectToInstanceKey() != linkInfo.second) - { - sock->SendAuthResponseError(ERROR_TIMED_OUT); - sock->DelayedCloseSocket(); - return; - } - - sock->SetWorldSession(session); - session->AddInstanceConnection(sock); - session->HandleContinuePlayerLogin(); - } -} - bool World::HasRecentlyDisconnected(WorldSession* session) { if (!session) @@ -3383,10 +3358,6 @@ void World::SendServerMessage(ServerMessageType messageID, std::string_view stri void World::UpdateSessions(uint32 diff) { - std::pair<std::weak_ptr<WorldSocket>, uint64> linkInfo; - while (_linkSocketQueue.next(linkInfo)) - ProcessLinkInstanceSocket(std::move(linkInfo)); - { TC_METRIC_DETAILED_NO_THRESHOLD_TIMER("world_update_time", TC_METRIC_TAG("type", "Add sessions"), @@ -3397,6 +3368,15 @@ void World::UpdateSessions(uint32 diff) AddSession_(sess); } + { + std::pair<std::weak_ptr<WorldSocket>, uint64> linkInfo; + while (_linkSocketQueue.next(linkInfo)) + { + WorldSession::ConnectToKey key = { .Raw = linkInfo.second }; + WorldSession::AddInstanceConnection(FindSession(key.Fields.AccountId), linkInfo.first, key); + } + } + ///- Then send an update signal to remaining ones for (SessionMap::iterator itr = m_sessions.begin(), next; itr != m_sessions.end(); itr = next) { diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index ccc2176e0d7..710f25666b2 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -880,7 +880,6 @@ class TC_GAME_API World void AddSession_(WorldSession* s); LockedQueue<WorldSession*> addSessQueue; - void ProcessLinkInstanceSocket(std::pair<std::weak_ptr<WorldSocket>, uint64> linkInfo); LockedQueue<std::pair<std::weak_ptr<WorldSocket>, uint64>> _linkSocketQueue; // used versions |
