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 | 18 |
2 files changed, 16 insertions, 13 deletions
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 17363de5eb8..0e65704076d 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -31,17 +31,6 @@ #include "WorldSession.h" #include <memory> -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; WorldSocket::WorldSocket(tcp::socket&& socket) diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h index 8bf230e8005..6f6b0848423 100644 --- a/src/server/game/Server/WorldSocket.h +++ b/src/server/game/Server/WorldSocket.h @@ -30,7 +30,21 @@ #include <boost/asio/ip/tcp.hpp> using boost::asio::ip::tcp; -class EncryptablePacket; +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 { @@ -110,7 +124,7 @@ private: MessageBuffer _headerBuffer; MessageBuffer _packetBuffer; - MPSCQueue<EncryptablePacket> _bufferQueue; + MPSCQueue<EncryptablePacket, &EncryptablePacket::SocketQueueLink> _bufferQueue; std::size_t _sendBufferSize; QueryCallbackProcessor _queryProcessor; |
