#include #include #include #include #include #include enum class PacketID { KeepAlive = 0}; class PacketHandler; using PacketBase = sp::MessageBase; template using Message = sp::ConcreteMessage; struct KeepAlivePacket { std::uint64_t m_KeepAlive; }; using KeepAliveMessage = Message; using AllMessages = std::tuple; class PacketHandler : public sp::GenericHandler {}; class MyHandler : public PacketHandler { public: virtual void Handle(const KeepAliveMessage& msg) { std::cout << "yo !" << "\n"; } }; using PacketDispatcher = sp::MessageDispatcher; using PacketFactory = sp::MessageFactory; int main() { KeepAliveMessage m{5UL}; MyHandler h; PacketDispatcher d; d.RegisterHandler(PacketID::KeepAlive, &h); d.Dispatch(m); PacketFactory f; auto message = f.CreateMessage(PacketID::KeepAlive); d.Dispatch(*message); return 0; }