/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuProtocolStack.hpp Date: 2022-8-24 Author: Reece ***/ #pragma once namespace Aurora::IO::Protocol { struct ProtocolPiece; struct ProtocolStack : IProtocolStack { ~ProtocolStack(); void 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 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; AuSPtr pSourceBufer; bool bOwnsSource {}; AuSPtr pDrainBuffer; AuSPtr pBottomPiece; AuSPtr pTopPiece; bool bWrittenEnd {}; }; }