/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: ProtocolPiece.hpp Date: 2022-8-24 Author: Reece ***/ #pragma once namespace Aurora::IO::Protocol { struct IProtocolNext; struct ProtocolStack; struct ProtocolPiece : IProtocolPiece, AuEnableSharedFromThis { ProtocolStack *pParent; AuSPtr pInterceptor; AuSPtr pInterceptorEx; AuSPtr pWriteInteface; AuSPtr pNext; AuSPtr pBefore; AuByteBuffer outputBuffer; AuSPtr pOuputWriter; bool bMultipleTick {}; AuOptional uMax; AuUInt64 uStartingSize {}; friend struct ProtocolStack; // IProtocolPiece::PrivateUserDataClear() AuSPtr GetParent() override; AuSPtr GetNextPiece() override; AuSPtr GetPreviousPiece() override; bool ReallocateDrainBuffer(AuUInt32 uOutputLength) override; bool ReallocateSourceBuffer(AuUInt32 uInputLength) override; void Remove() override; AuSPtr GetNextWriter() override; AuSPtr GetInputWriter() override; AuSPtr GetOutputReader() override; AuSPtr GetNextPieceBuffer() override; AuSPtr GetExtendedInterceptor() override; AuSPtr GetShortPipeInterceptor() override; AuOptional ExchangeMaximumBufferLength(AuOptional optMax) override; }; }