#pragma once #include #include namespace sp { namespace io { template class IOInterface { public: DataBuffer Read(std::size_t a_Amount); void Write(const DataBuffer& a_Data); }; template class Stream { protected: MessageDispatcher m_Dispatcher; IOInterface m_Interface; using MessageBase = typename MessageDispatcher::MessageBaseType; using MsgIdType = typename MessageBase::MsgIdType; public: Stream() {} Stream(IOInterface&& a_Interface); Stream(Stream&& a_Stream); void RecieveMessages(); void SendMessage(const MessageBase& a_Message); MessageDispatcher& GetDispatcher() { return m_Dispatcher; } }; } // namespace io } // namespace sp #include