#include #include #include #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::MessageHandler {}; class MyHandler : public PacketHandler { public: virtual void Handle(const KeepAlivePacket& msg) { std::cout << "I recieved a keep alive : " << msg.m_KeepAlive << "\n"; } }; using PacketDispatcher = sp::MessageDispatcher; using PacketFactory = sp::MessageFactory; using PacketStream = sp::MessageStream; int main() { KeepAliveMessage m{69UL}; // dispatch tests MyHandler h; PacketDispatcher d; d.RegisterHandler(PacketID::KeepAlive, &h); d.Dispatch(m); PacketFactory f; auto message = f.CreateMessage(PacketID::KeepAlive); d.Dispatch(*message); // write tests std::ofstream file {"test.bin"}; PacketStream p(std::make_shared(file)); p.WriteMessage(m); file.flush(); std::ifstream file2 {"test.bin"}; PacketStream p2(std::make_shared(file2)); auto message2 = p2.ReadMessage(); d.Dispatch(*message2); // message->Write(file); // file << std::endl; // m.Write(file); // file << std::endl; // message->Read(file); return 0; }