/*** Copyright (C) 2024 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuIOAdapterAsyncDelegators.hpp Date: 2024-2-24 Author: Reece ***/ #pragma once #include #include namespace Aurora::IO::Adapters { struct AsyncReaderWriter : IAsyncTransaction, Async::APCLessWaitable, AuAsync::IWorkItemHandler { AuSPtr pStreamReader; AuSPtr pStreamReaderEx; AuSPtr pStreamWriter; AuSPtr pStreamWriterEx; Memory::MemoryViewRead pReadView; Memory::MemoryViewWrite pWriteView; AuWorkerPId workers; void DispatchFrame(ProcessInfo &info) override; void OnFailure() override; bool StartRead(AuUInt64 uOffset, const Memory::MemoryViewWrite &memoryView) override; bool StartWrite(AuUInt64 uOffset, const Memory::MemoryViewRead &memoryView) override; AuUInt32 GetLastPacketLength() override; void OnOriginThreadComplete() override; bool Complete() override; bool HasFailed() override; bool HasCompleted() override; AuUInt GetOSErrorCode() override; void SetCallback(const AuSPtr &pSubscriber) override; bool Wait(AuUInt32 uTimeout) override; AuSPtr NewLoopSource() override; void Reset() override; void SetBaseOffset(AuUInt64 uBaseOffset) override; bool TryAttachToCompletionGroup(const AuSPtr &pCompletionGroup) override; CompletionGroup::ICompletionGroupWorkHandle *ToCompletionGroupHandle() override; AuSPtr GetCompletionGroup() override; AuInt64 iBaseOffset {}; private: AuMutex mutex; AuSPtr pSubscriber; AuUInt64 uLastOffset {}; AuUInt uLastLength {}; bool bInProgress {}; EStreamError eStreamError = EStreamError::eErrorNone; }; }