#pragma once

/**
 * \file PacketHandler.h
 * \brief File containing the blitz::protocol::PacketHandler class
 */

#include <blitz/protocol/Packets.h>
#include <blitz/protocol/PacketVisitor.h>

namespace blitz {
namespace protocol {

class PacketDispatcher;

#define DeclarePacket(PacketName, ...) virtual void Visit(const packets::PacketName&); virtual void HandlePacket(const packets::PacketName&) {}

/**
 * \class PacketHandler
 * \brief Class used to handle packets
 */
class PacketHandler : public PacketVisitor {
  public:
	PacketHandler() {}
	~PacketHandler() {}

	DeclareAllPacket()

};

#undef DeclarePacket

}  // namespace protocol
}  // namespace blitz