You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmw-tes3mp/components/openmw-mp/Base/BasePacketProcessor.hpp

52 lines
1.3 KiB
C++

//
// Created by koncord on 31.03.17.
//
#ifndef OPENMW_BASEPACKETPROCESSOR_HPP
#define OPENMW_BASEPACKETPROCESSOR_HPP
#include <string>
#include <memory>
#include <unordered_map>
#define BPP_INIT(packet_id) packetID = packet_id; strPacketID = #packet_id; className = typeid(this).name(); avoidReading = false;
template<typename Proccessor>
class BasePacketProcessor
{
public:
typedef std::unordered_map<unsigned char, std::unique_ptr<Proccessor>> processors_t;
unsigned char GetPacketID()
{
return packetID;
}
std::string GetNameOfID()
{
return strPacketID;
}
std::string GetClassName()
{
return className;
}
static void AddProcessor(Proccessor *processor)
{
for (auto &p : processors)
{
if (processor->packetID == p.first)
throw std::logic_error("processor " + p.second->strPacketID + " already registered. Check " +
processor->className + " and " + p.second->className);
}
processors.insert(typename processors_t::value_type(processor->GetPacketID(), processor));
}
protected:
unsigned char packetID;
std::string strPacketID;
std::string className;
bool avoidReading;
static processors_t processors;
};
#endif //OPENMW_BASEPACKETPROCESSOR_HPP