From a60f56e248e05dde07132889d08634702ff3835d Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Tue, 12 Aug 2025 11:09:11 +0200 Subject: [PATCH] add ReadConcreteMessage --- include/sp/io/MessageStream.h | 28 ++++++++++++++-------------- include/sp/io/MessageStream.inl | 19 ++++++++++++++++--- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/include/sp/io/MessageStream.h b/include/sp/io/MessageStream.h index 2c0d632..4ee378a 100644 --- a/include/sp/io/MessageStream.h +++ b/include/sp/io/MessageStream.h @@ -1,10 +1,10 @@ #pragma once +#include #include #include #include #include -#include namespace sp { @@ -20,28 +20,28 @@ class MessageStream { public: MessageStream(std::shared_ptr&& a_Stream) : m_Stream(std::move(a_Stream)) {} - template - MessageStream(std::shared_ptr&& a_Stream, TEnc&&... a_Encapsulators) : - m_Stream(std::move(a_Stream)){ - m_Encapsulators.reserve(sizeof...(a_Encapsulators)); - AddEncapsulators(std::move(a_Encapsulators ...)); - } + template + MessageStream(std::shared_ptr&& a_Stream, TEnc&&... a_Encapsulators) : m_Stream(std::move(a_Stream)) { + m_Encapsulators.reserve(sizeof...(a_Encapsulators)); + AddEncapsulators(std::move(a_Encapsulators...)); + } std::unique_ptr ReadMessage(); std::unique_ptr ReadMessage(MessageIdType a_Id); + template + std::unique_ptr ReadConcreteMessage(); + void WriteMessage(const MessageBaseType& a_Message, bool a_WriteId = true); - template - void AddEncapsulators(Args&& ... a_Encapsulators) { - AddEncapsulators(std::move(std::make_tuple<>(a_Encapsulators ...))); + template + void AddEncapsulators(Args&&... a_Encapsulators) { + AddEncapsulators(std::move(std::make_tuple<>(a_Encapsulators...))); } - template + template void AddEncapsulators(std::tuple&& a_Encapsulators) { - TupleForEach([this](auto&& a_Encapsulator){ - m_Encapsulators.push_back(std::move(a_Encapsulator)); - }, a_Encapsulators); + TupleForEach([this](auto&& a_Encapsulator) { m_Encapsulators.push_back(std::move(a_Encapsulator)); }, a_Encapsulators); } private: diff --git a/include/sp/io/MessageStream.inl b/include/sp/io/MessageStream.inl index b0f27e9..b425aa7 100644 --- a/include/sp/io/MessageStream.inl +++ b/include/sp/io/MessageStream.inl @@ -12,9 +12,10 @@ DataBuffer MessageStream::ReadAndDecapsulate() { DataBuffer buffer = m_Stream->Read(1); data = *buffer.data(); }); + std::size_t amount = messageLength.GetValue(); DataBuffer buffer = m_Stream->Read(amount); - + for (auto& enc : m_Encapsulators) { buffer = enc->Decapsulate(buffer); } @@ -23,7 +24,19 @@ DataBuffer MessageStream::ReadAndDecapsulate() { } template -std::unique_ptr MessageStream::MakeMessage(DataBuffer& buffer, MessageIdType a_Id) { +template +std::unique_ptr MessageStream::ReadConcreteMessage() { + DataBuffer buffer = ReadAndDecapsulate(); + + auto m_Message = std::make_unique(); + m_Message->Read(buffer); + + return m_Message; +} + +template +std::unique_ptr MessageStream::MakeMessage( + DataBuffer& buffer, MessageIdType a_Id) { static const TMessageFactory FACTORY; auto message = FACTORY.CreateMessage(a_Id); message->Read(buffer); @@ -32,7 +45,7 @@ std::unique_ptr MessageStream std::unique_ptr MessageStream::ReadMessage(MessageIdType a_Id) { - + DataBuffer buffer = ReadAndDecapsulate(); return MakeMessage(buffer, a_Id);