This commit is contained in:
@@ -1,10 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
#include <sp/common/DataBuffer.h>
|
#include <sp/common/DataBuffer.h>
|
||||||
#include <sp/io/IoInterface.h>
|
#include <sp/io/IoInterface.h>
|
||||||
#include <sp/io/MessageEncapsulator.h>
|
#include <sp/io/MessageEncapsulator.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
namespace sp {
|
namespace sp {
|
||||||
|
|
||||||
@@ -21,8 +21,7 @@ class MessageStream {
|
|||||||
MessageStream(std::shared_ptr<IoInterface>&& a_Stream) : m_Stream(std::move(a_Stream)) {}
|
MessageStream(std::shared_ptr<IoInterface>&& a_Stream) : m_Stream(std::move(a_Stream)) {}
|
||||||
|
|
||||||
template <typename... TEnc>
|
template <typename... TEnc>
|
||||||
MessageStream(std::shared_ptr<IoInterface>&& a_Stream, TEnc&&... a_Encapsulators) :
|
MessageStream(std::shared_ptr<IoInterface>&& a_Stream, TEnc&&... a_Encapsulators) : m_Stream(std::move(a_Stream)) {
|
||||||
m_Stream(std::move(a_Stream)){
|
|
||||||
m_Encapsulators.reserve(sizeof...(a_Encapsulators));
|
m_Encapsulators.reserve(sizeof...(a_Encapsulators));
|
||||||
AddEncapsulators(std::move(a_Encapsulators...));
|
AddEncapsulators(std::move(a_Encapsulators...));
|
||||||
}
|
}
|
||||||
@@ -30,6 +29,9 @@ class MessageStream {
|
|||||||
std::unique_ptr<MessageBaseType> ReadMessage();
|
std::unique_ptr<MessageBaseType> ReadMessage();
|
||||||
std::unique_ptr<MessageBaseType> ReadMessage(MessageIdType a_Id);
|
std::unique_ptr<MessageBaseType> ReadMessage(MessageIdType a_Id);
|
||||||
|
|
||||||
|
template <typename TMessage>
|
||||||
|
std::unique_ptr<TMessage> ReadConcreteMessage();
|
||||||
|
|
||||||
void WriteMessage(const MessageBaseType& a_Message, bool a_WriteId = true);
|
void WriteMessage(const MessageBaseType& a_Message, bool a_WriteId = true);
|
||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
@@ -39,9 +41,7 @@ class MessageStream {
|
|||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
void AddEncapsulators(std::tuple<Args...>&& a_Encapsulators) {
|
void AddEncapsulators(std::tuple<Args...>&& a_Encapsulators) {
|
||||||
TupleForEach([this](auto&& a_Encapsulator){
|
TupleForEach([this](auto&& a_Encapsulator) { m_Encapsulators.push_back(std::move(a_Encapsulator)); }, a_Encapsulators);
|
||||||
m_Encapsulators.push_back(std::move(a_Encapsulator));
|
|
||||||
}, a_Encapsulators);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ DataBuffer MessageStream<TMessageFactory>::ReadAndDecapsulate() {
|
|||||||
DataBuffer buffer = m_Stream->Read(1);
|
DataBuffer buffer = m_Stream->Read(1);
|
||||||
data = *buffer.data();
|
data = *buffer.data();
|
||||||
});
|
});
|
||||||
|
|
||||||
std::size_t amount = messageLength.GetValue();
|
std::size_t amount = messageLength.GetValue();
|
||||||
DataBuffer buffer = m_Stream->Read(amount);
|
DataBuffer buffer = m_Stream->Read(amount);
|
||||||
|
|
||||||
@@ -23,7 +24,19 @@ DataBuffer MessageStream<TMessageFactory>::ReadAndDecapsulate() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename TMessageFactory>
|
template <typename TMessageFactory>
|
||||||
std::unique_ptr<typename TMessageFactory::MessageBaseType> MessageStream<TMessageFactory>::MakeMessage(DataBuffer& buffer, MessageIdType a_Id) {
|
template <typename TMessage>
|
||||||
|
std::unique_ptr<TMessage> MessageStream<TMessageFactory>::ReadConcreteMessage() {
|
||||||
|
DataBuffer buffer = ReadAndDecapsulate();
|
||||||
|
|
||||||
|
auto m_Message = std::make_unique<TMessage>();
|
||||||
|
m_Message->Read(buffer);
|
||||||
|
|
||||||
|
return m_Message;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename TMessageFactory>
|
||||||
|
std::unique_ptr<typename TMessageFactory::MessageBaseType> MessageStream<TMessageFactory>::MakeMessage(
|
||||||
|
DataBuffer& buffer, MessageIdType a_Id) {
|
||||||
static const TMessageFactory FACTORY;
|
static const TMessageFactory FACTORY;
|
||||||
auto message = FACTORY.CreateMessage(a_Id);
|
auto message = FACTORY.CreateMessage(a_Id);
|
||||||
message->Read(buffer);
|
message->Read(buffer);
|
||||||
|
|||||||
Reference in New Issue
Block a user