#pragma once

#include "blitz/protocol/PacketsForward.h"
#include "blitz/protocol/Protocol.h"

namespace blitz {
namespace protocol {

class PacketDispatcher;

class PacketHandler {
  private:
	PacketDispatcher* m_Dispatcher;

  public:
	PacketHandler(PacketDispatcher* dispatcher) : m_Dispatcher(dispatcher) {}
	virtual ~PacketHandler() {}

	PacketDispatcher* GetDispatcher() {
		return m_Dispatcher;
	}

	virtual void HandlePacket(const ChatPacket* packet) {}
	virtual void HandlePacket(const ConnexionInfoPacket* packet) {}
	virtual void HandlePacket(const DisconnectPacket* packet) {}
	virtual void HandlePacket(const KeepAlivePacket* packet) {}
	virtual void HandlePacket(const PlayerJoinPacket* packet) {}
	virtual void HandlePacket(const PlayerLeavePacket* packet) {}
	virtual void HandlePacket(const PlayerListPacket* packet) {}
	virtual void HandlePacket(const PlayerLoginPacket* packet) {}
	virtual void HandlePacket(const ServerTpsPacket* packet) {}
};

}  // namespace protocol
}  // namespace blitz