// PacketFactory.h
class PacketFactory
{
public:
// I guess this goes here, could go elsewhere though.
enum PacketIds
{
PACKET_ACKNOWLEDGE = 0x00,
MAX_PACKET
};
private:
// Ensures packet ids fit in one byte.
BOOST_STATIC_ASSERT(MAX_PACKET <= 0x100);
public:
struct UnknownPacketException : std::runtime_error
{
UnknownPacketException() : runtime_error("Unknown packet id.") {}
};
PacketFactory();
Packet *createFromId(PacketIds id);
private:
PacketFactory(const PacketFactory&);
PacketFactory& operator=(const PacketFactory&);
typedef std::map<PacketIds, boost::function<Packet*()> > IdMapType;
IdMapType idMap;
};
extern PacketFactory globalPacketFactory;