/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: ProtocolStack.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); bool AddInterceptor(const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) override; bool AddInterceptorEx(const AuSPtr &pInterceptor, AuUInt uOutputBufferSize) override; bool AddEndInterceptor(const AuSPtr &pInterceptor) override; void Destroy() override; AuSPtr AsStreamWriter() override; AuSPtr AsWritableByteBuffer() override; AuSPtr AsStreamReader() override; AuSPtr AsReadableByteBuffer() override; AuSPtr pSourceBufer; bool bOwnsSource {}; AuSPtr pDrainBuffer; AuSPtr pBottomPiece; AuSPtr pTopPiece; bool bWrittenEnd {}; }; }