#pragma once #include #include #include #include namespace sp { template class MessageStream { private: std::vector m_Encapsulators; std::shared_ptr m_Stream; using MessageBaseType = typename TMessageFactory::MessageBaseType; using MessageIdType = typename MessageBaseType::MessageIdType; public: MessageStream(std::shared_ptr&& a_Stream) : m_Stream(std::move(a_Stream)) {} std::unique_ptr ReadMessage(); std::unique_ptr ReadMessage(MessageIdType a_Id); void WriteMessage(const MessageBaseType& a_Message, bool a_WriteId = true); private: DataBuffer ReadAndDecapsulate(); std::unique_ptr MakeMessage(DataBuffer& buffer, MessageIdType a_Id); }; } // namespace sp #include