#ifndef DEMO_PROTOCOLBASE_H #define DEMO_PROTOCOLBASE_H #include "Message.h" #include #include #include class ProtocolBase { public: static const uint32_t actual_version; static const uint32_t minimal_version; static std::unique_ptr CreateProtocol(uint32_t version); static bool IsSupported(uint32_t version); virtual ~ProtocolBase() = default; virtual std::unique_ptr ReadProtocolPacket(const uint8_t *buffer, size_t size) = 0; virtual rtc::Buffer WriteProtocolPacket(const message::Base *msg) = 0; const uint32_t version; protected: explicit ProtocolBase(uint32_t version); private: typedef std::function()> Constructor; static const std::map constructors; }; #endif //DEMO_PROTOCOLBASE_H