90 lines
1.8 KiB
C++
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
|