diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/game/Server/WorldSocket.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSocket.h | 19 |
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; |
