aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server/Packet.h
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2016-08-19 22:29:00 +0200
committerGitHub <noreply@github.com>2016-08-19 22:29:00 +0200
commit4073cc510a5c73ede8a38687e92ec9b3ed0ee4e5 (patch)
tree4d198d8d591563dcd900f97de5ea39f8d02ddea1 /src/server/game/Server/Packet.h
parent628792f960e035ca1ce10dcfbea2297a20c1e00c (diff)
Core/Packets: Port packet handling rework from 6.x branch (#17777)
* Core/Packets: Port packet handling rework from 6.x branch Port packet handling reword from 6.x branch. Old handlers are still used at the moment, these changes allow to port old handlers to new packet-specifc ones.
Diffstat (limited to 'src/server/game/Server/Packet.h')
-rw-r--r--src/server/game/Server/Packet.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/server/game/Server/Packet.h b/src/server/game/Server/Packet.h
new file mode 100644
index 00000000000..64a4a9bd267
--- /dev/null
+++ b/src/server/game/Server/Packet.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef PacketBaseWorld_h__
+#define PacketBaseWorld_h__
+
+#include "WorldPacket.h"
+
+namespace WorldPackets
+{
+ class TC_GAME_API Packet
+ {
+ public:
+ Packet(WorldPacket&& worldPacket) : _worldPacket(std::move(worldPacket)) { }
+
+ virtual ~Packet() = default;
+
+ Packet(Packet const& right) = delete;
+ Packet& operator=(Packet const& right) = delete;
+
+ virtual WorldPacket const* Write() = 0;
+ virtual void Read() = 0;
+
+ WorldPacket const* GetRawPacket() const { return &_worldPacket; }
+ size_t GetSize() const { return _worldPacket.size(); }
+
+ protected:
+ WorldPacket _worldPacket;
+ };
+
+ class ServerPacket : public Packet
+ {
+ public:
+ ServerPacket(OpcodeServer opcode, size_t initialSize = 200) : Packet(WorldPacket(opcode, initialSize)) { }
+
+ void Read() override final { ASSERT(!"Read not implemented for server packets."); }
+
+ void Clear() { _worldPacket.clear(); }
+ WorldPacket&& Move() { return std::move(_worldPacket); }
+
+ OpcodeServer GetOpcode() const { return OpcodeServer(_worldPacket.GetOpcode()); }
+ };
+
+ class ClientPacket : public Packet
+ {
+ public:
+ ClientPacket(WorldPacket&& packet) : Packet(std::move(packet)) { }
+ ClientPacket(OpcodeClient expectedOpcode, WorldPacket&& packet) : Packet(std::move(packet)) { ASSERT(GetOpcode() == expectedOpcode); }
+
+ WorldPacket const* Write() override final
+ {
+ ASSERT(!"Write not allowed for client packets.");
+ // Shut up some compilers
+ return nullptr;
+ }
+
+ OpcodeClient GetOpcode() const { return OpcodeClient(_worldPacket.GetOpcode()); }
+ };
+}
+
+#endif // PacketBaseWorld_h__