generic encapsulator

This commit is contained in:
2025-02-27 22:50:51 +01:00
parent f6620dc522
commit 9fa023f716
5 changed files with 96 additions and 38 deletions

View File

@@ -13,14 +13,14 @@ class IOInterface {
void Write(const DataBuffer& a_Data);
};
template <typename IOTag>
template <typename TOption>
class MessageEncapsulator {
public:
static DataBuffer Encapsulate(const DataBuffer& a_Data);
static DataBuffer Decapsulate(DataBuffer& a_Data, std::size_t a_Length);
static DataBuffer Encapsulate(const DataBuffer& a_Data, const TOption& a_Option);
static DataBuffer Decapsulate(DataBuffer& a_Data, std::size_t a_Length, const TOption& a_Option);
};
template <typename IOTag, typename MessageDispatcher, typename MessageFactory>
template <typename IOTag, typename MessageDispatcher, typename MessageFactory, typename... TOptions>
class Stream {
protected:
MessageDispatcher m_Dispatcher;
@@ -33,16 +33,16 @@ class Stream {
Stream(IOInterface<IOTag>&& a_Interface);
Stream(Stream&& a_Stream);
void RecieveMessages();
void SendMessage(const MessageBase& a_Message);
void RecieveMessages(const TOptions&... a_Options);
void SendMessage(const MessageBase& a_Message, const TOptions&... a_Options);
MessageDispatcher& GetDispatcher() {
return m_Dispatcher;
}
private:
static DataBuffer Encapsulate(const DataBuffer& a_Data);
static DataBuffer Decapsulate(DataBuffer& a_Data, std::size_t a_Length);
static DataBuffer Encapsulate(const DataBuffer& a_Data, const TOptions&... a_Options);
static DataBuffer Decapsulate(DataBuffer& a_Data, std::size_t a_Length, const TOptions&... a_Options);
};
} // namespace io