AuroraRuntime/Include/Aurora/IO/Protocol/ProtocolStackFromDescription.hpp
Jamie Reece Wilson 7da39d2022 [+] Aurora::IO::Protocol::NewProtocolStackFromDescription
[+] Aurora::IO::Protocol::UtilityWrapStreamReaderWithInterceptors
[+] Aurora::IO::Protocol::EProtocolStackCreateType
[+] Aurora::IO::Protocol::ProtocolStackByBufferedAdhoc
[+] Aurora::IO::Protocol::ProtocolStackByBuffered
[+] Aurora::IO::Protocol::ProtocolStackByPipe
[+] Aurora::IO::Protocol::ProtocolStackDescription
2023-09-21 08:02:02 +01:00

60 lines
2.0 KiB
C++

/***
Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved.
File: ProtocolStackFromDescription.cpp
Date: 2023-09-21
Author: Reece
***/
#pragma once
namespace Aurora::IO::Protocol
{
struct ProtocolStackByBuffered
{
AuUInt uBufferedStreamLength { 128 * 1024 };
};
struct ProtocolStackByBufferedAdhoc : ProtocolStackByBuffered
{
AuSPtr<IStreamReader> pStreamReader {};
AuUInt uPreferredFragmentSize {};
};
struct ProtocolStackByPipe
{
AuSPtr<IIOPipeWork> pWork;
bool bAutoTick = true;
bool bKillPipeOnFirstRootLevelFalse = true;
};
struct ProtocolStackExtraData
{
AuOptionalEx<bool> bKillPipeOnFirstRootLevelFalse {};
bool bStreamReaderFlagAdhocPump {};
bool bStreamReaderFlagAdhocReadFromAdhoc {};
bool bFeatPending {};
};
AUE_DEFINE_VA(EProtocolStackCreateType,
eByPipe,
eByBuffered,
eByBufferedAdhocStream
);
struct ProtocolStackDescription
{
EProtocolStackCreateType type;
ProtocolStackByPipe byPipe;
ProtocolStackByBuffered byBuffered;
ProtocolStackByBufferedAdhoc byBufferedStream;
ProtocolStackExtraData extendedFlags;
};
AUKN_SYM AuSPtr<IProtocolStack> NewProtocolStackFromDescription(const ProtocolStackDescription &description);
AUKN_SYM AuSPtr<IStreamReader> UtilityWrapStreamReaderWithInterceptors(AuSPtr<IStreamReader> pStreamReader,
AuList<AuTuple<bool /* bSingleFrame*/, AuUInt /*nextBufferSize*/, AuSPtr<IProtocolInterceptorEx>>> pairs,
AuUInt uBaseStreamLength = 128 * 1024,
AuUInt uPreferredFragmentSize = 0,
AuSPtr<IProtocolStack> *pOptOutStack = nullptr);
}