aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/Server/WorldSocket.cpp11
-rw-r--r--src/server/game/Server/WorldSocket.h19
2 files changed, 18 insertions, 12 deletions
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 7b41c9e5201..88bf616a56c 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -48,17 +48,6 @@ struct CompressedWorldPacket
#pragma pack(pop)
-class EncryptablePacket : public WorldPacket
-{
-public:
- EncryptablePacket(WorldPacket const& packet, bool encrypt) : WorldPacket(packet), _encrypt(encrypt) { }
-
- bool NeedsEncryption() const { return _encrypt; }
-
-private:
- bool _encrypt;
-};
-
using boost::asio::ip::tcp;
std::string const WorldSocket::ServerConnectionInitialize("WORLD OF WARCRAFT CONNECTION - SERVER TO CLIENT - V2");
diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h
index 5327db10ed6..a24b9fa92e9 100644
--- a/src/server/game/Server/WorldSocket.h
+++ b/src/server/game/Server/WorldSocket.h
@@ -24,6 +24,7 @@
#include "DatabaseEnvFwd.h"
#include "MessageBuffer.h"
#include "Socket.h"
+#include "WorldPacket.h"
#include "WorldPacketCrypt.h"
#include "MPSCQueue.h"
#include <array>
@@ -38,6 +39,22 @@ class WorldSession;
enum ConnectionType : int8;
enum OpcodeClient : uint16;
+class EncryptablePacket : public WorldPacket
+{
+public:
+ EncryptablePacket(WorldPacket const& packet, bool encrypt) : WorldPacket(packet), _encrypt(encrypt)
+ {
+ SocketQueueLink.store(nullptr, std::memory_order_relaxed);
+ }
+
+ bool NeedsEncryption() const { return _encrypt; }
+
+ std::atomic<EncryptablePacket*> SocketQueueLink;
+
+private:
+ bool _encrypt;
+};
+
namespace WorldPackets
{
class ServerPacket;
@@ -151,7 +168,7 @@ private:
MessageBuffer _headerBuffer;
MessageBuffer _packetBuffer;
- MPSCQueue<EncryptablePacket> _bufferQueue;
+ MPSCQueue<EncryptablePacket, &EncryptablePacket::SocketQueueLink> _bufferQueue;
std::size_t _sendBufferSize;
z_stream* _compressionStream;