Files
Simple-Protocol-Lib/include/sp/io/IOInterface.h
2025-02-27 21:45:09 +01:00

51 lines
1.1 KiB
C++

#pragma once
#include <memory>
#include <sp/common/DataBuffer.h>
namespace sp {
namespace io {
template <typename IOTag>
class IOInterface {
public:
DataBuffer Read(std::size_t a_Amount);
void Write(const DataBuffer& a_Data);
};
template <typename IOTag>
class MessageEncapsulator {
public:
static DataBuffer Encapsulate(const DataBuffer& a_Data);
static DataBuffer Decapsulate(DataBuffer& a_Data, std::size_t a_Length);
};
template <typename IOTag, typename MessageDispatcher, typename MessageFactory>
class Stream {
protected:
MessageDispatcher m_Dispatcher;
IOInterface<IOTag> m_Interface;
using MessageBase = typename MessageDispatcher::MessageBaseType;
public:
Stream() {}
Stream(IOInterface<IOTag>&& a_Interface);
Stream(Stream&& a_Stream);
void RecieveMessages();
void SendMessage(const MessageBase& a_Message);
MessageDispatcher& GetDispatcher() {
return m_Dispatcher;
}
private:
static DataBuffer Encapsulate(const DataBuffer& a_Data);
static DataBuffer Decapsulate(DataBuffer& a_Data, std::size_t a_Length);
};
} // namespace io
} // namespace sp
#include <sp/io/IOInterfaceImpl.inl>