/* * Copyright (C) 2016+ AzerothCore , released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3 * Copyright (C) 2021+ WarheadCore */ #ifndef PacketBaseWorld_h__ #define PacketBaseWorld_h__ #include "WorldPacket.h" namespace WorldPackets { class AC_GAME_API Packet { public: Packet(WorldPacket&& 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 AC_GAME_API ServerPacket : public Packet { public: ServerPacket(OpcodeServer opcode, size_t initialSize = 200); void Read() final; void Clear() { _worldPacket.clear(); } WorldPacket&& Move() { return std::move(_worldPacket); } void ShrinkToFit() { _worldPacket.shrink_to_fit(); } OpcodeServer GetOpcode() const { return OpcodeServer(_worldPacket.GetOpcode()); } }; class AC_GAME_API ClientPacket : public Packet { public: ClientPacket(WorldPacket&& packet); ClientPacket(OpcodeClient expectedOpcode, WorldPacket&& packet); WorldPacket const* Write() final; OpcodeClient GetOpcode() const { return OpcodeClient(_worldPacket.GetOpcode()); } }; } #endif // PacketBaseWorld_h__