aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/WorldSession.cpp18
-rw-r--r--src/server/game/Server/WorldSession.h2
2 files changed, 19 insertions, 1 deletions
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<WorldSocket> sockRef, ConnectToKey key)
+{
+ std::shared_ptr<WorldSocket> 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<WorldSocket> 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<WorldSocket> sockRef, ConnectToKey key);
public:
QueryCallbackProcessor& GetQueryProcessor() { return _queryProcessor; }