60 lines
2.0 KiB
C++
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);
|
||
|
}
|