/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuProtocolStack.hpp Date: 2022-8-24 Author: Reece ***/ #pragma once #include "../AuIOPipeProcessor.hpp" namespace Aurora::IO::Protocol { struct ProtocolPiece; struct ProtocolStack : IProtocolStack, AuEnableSharedFromThis { ~ProtocolStack(); bool DoTick() override; bool DoTick(const AuSPtr &read, const AuSPtr &pPiece); AuSPtr AppendInterceptor(const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) override; AuSPtr AppendInterceptorEx(const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) override; AuSPtr AppendSingleFrameProcessor(const AuSPtr &pInterceptorEx) override; AuSPtr AppendSingleFrameProcessorEx(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize) override; AuSPtr PrependInterceptor(const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) override; AuSPtr PrependInterceptorEx(const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) override; AuSPtr PrependSingleFrameProcessor(const AuSPtr &pInterceptorEx) override; AuSPtr PrependSingleFrameProcessorEx(const AuSPtr &pInterceptorEx, AuUInt uOutputBufferSize) override; AuSPtr AddEndInterceptor(const AuSPtr &pInterceptor) override; void Destroy() override; AuSPtr AddInterceptorWhere(bool bPrepend, const AuSPtr &pInterceptor, AuUInt uOutputBufferSize); AuSPtr AddInterceptorWhereEx(bool bPrepend, const AuSPtr &pInterceptor, AuUInt uOutputBufferSize, bool bMultipleTick); AuSPtr AsStreamWriter() override; AuSPtr AsWritableByteBuffer() override; AuSPtr AsStreamReader() override; AuSPtr AsReadableByteBuffer() override; AuList> GetArrayOfInterceptors() override; AuSPtr GetInterceptorAtIndex(AuUInt32 uIndex) override; AuSPtr pSourceBufer; bool bOwnsSource {}; AuSPtr pDrainBuffer; AuSPtr pBottomPiece; AuSPtr pTopPiece; bool bWrittenEnd {}; AuWPtr pPipeWork; bool bKillPipeOnFirstRootLevelFalse {}; AuSPtr pStreamReaderCache; AuSPtr pStreamWriterCache; }; }