Files
2023-08-12 14:53:50 +02:00

90 lines
1.8 KiB
C++

#pragma once
#include "misc/DataBuffer.h"
#include <memory>
namespace td {
namespace protocol {
class PacketHandler;
enum class PacketType : std::uint8_t {
// client --> server
PlayerLogin = 0,
SelectTeam,
SpawnMob,
SendMobs,
PlaceTower,
// client <-- server
PlayerJoin,
PlayerLeave,
WorldBeginData,
WorldData,
UpdateMoney,
UpdateEXP,
UpdateLobbyTime,
UpdateGameState,
PlayerList,
ConnectionInfo,
UpdatePlayerTeam,
ServerTps,
WorldAddTower,
UpdateMobStates,
UpdateCastleLife,
// client <--> server
KeepAlive,
Disconnect,
UpgradeTower,
RemoveTower,
PlayerBuyItem,
PlayerBuyMobUpgrade,
PACKET_COUNT
};
class Packet {
public:
Packet() {}
virtual ~Packet() {}
virtual DataBuffer Serialize(bool packetID = true) const = 0;
virtual void Deserialize(DataBuffer& data) = 0;
virtual void Dispatch(PacketHandler* handler) const = 0;
virtual void WritePacketID(DataBuffer& data, bool packetID) const;
virtual PacketType GetType() const = 0;
std::uint8_t GetID() const { return static_cast<std::uint8_t>(GetType()); }
virtual bool IsTimed() const { return false; }
};
class DelayedPacket : public Packet {
protected:
std::uint64_t m_PacketTime = 69;
public:
DelayedPacket() {}
virtual ~DelayedPacket() {}
virtual DataBuffer Serialize(bool packetID = true) const = 0;
virtual void Deserialize(DataBuffer& data) = 0;
virtual void Dispatch(PacketHandler* handler) const = 0;
virtual void WritePacketID(DataBuffer& data, bool packetID) const override;
virtual PacketType GetType() const = 0;
virtual bool IsTimed() const override { return true; }
void SetPacketTime(std::uint64_t packetTime) { m_PacketTime = packetTime; }
};
typedef std::unique_ptr<Packet> PacketPtr;
typedef std::unique_ptr<DelayedPacket> DelayedPacketPtr;
} // namespace protocol
} // namespace td