From f55d6c5fa0147eaea0a8fca316d93fd0b75d8b51 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 8 May 2025 14:30:42 +0200 Subject: Core/World: Move linking instance socket to WorldSession (cherry picked from commit cb837ce926d6a8c13d5f74faea246fea19db91d0) --- src/server/game/Server/WorldSession.cpp | 18 ++++++++++++++++++ src/server/game/Server/WorldSession.h | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'src/server/game/Server') diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index aa44170eac5..1c8470eaae1 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -296,6 +296,24 @@ void WorldSession::SendPacket(WorldPacket const* packet, bool forced /*= false*/ m_Socket[conIdx]->SendPacket(*packet); } +void WorldSession::AddInstanceConnection(WorldSession* session, std::weak_ptr sockRef, ConnectToKey key) +{ + std::shared_ptr socket = sockRef.lock(); + if (!socket || !socket->IsOpen()) + return; + + if (!session || session->GetConnectToInstanceKey() != key.Raw) + { + socket->SendAuthResponseError(ERROR_TIMED_OUT); + socket->DelayedCloseSocket(); + return; + } + + socket->SetWorldSession(session); + session->m_Socket[CONNECTION_TYPE_INSTANCE] = std::move(socket); + session->HandleContinuePlayerLogin(); +} + /// Add an incoming packet to the queue void WorldSession::QueuePacket(WorldPacket* new_packet) { diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 750bdb7a9cf..9384f99928d 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -913,7 +913,6 @@ class TC_GAME_API WorldSession bool IsAddonRegistered(std::string_view prefix) const; void SendPacket(WorldPacket const* packet, bool forced = false); - void AddInstanceConnection(std::shared_ptr sock) { m_Socket[CONNECTION_TYPE_INSTANCE] = sock; } void SendNotification(char const* format, ...) ATTR_PRINTF(2, 3); void SendNotification(uint32 stringId, ...); @@ -1742,6 +1741,7 @@ class TC_GAME_API WorldSession }; uint64 GetConnectToInstanceKey() const { return _instanceConnectKey.Raw; } + static void AddInstanceConnection(WorldSession* session, std::weak_ptr sockRef, ConnectToKey key); public: QueryCallbackProcessor& GetQueryProcessor() { return _queryProcessor; } -- cgit v1.2.3