AuroraRuntime/Source/IO/Net/AuNetSocketChannelOutput.hpp
Jamie Reece Wilson 1fb36548ea [*] Minor net fixes
[*] Fix async shutdown / inline shutdown condition
[*] Fix multiple net triggers
[*] Fix spurious UDP Session Socket timeouts
2024-10-19 17:52:28 +01:00

52 lines
1.4 KiB
C++

/***
Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved.
File: AuNetSocketChannelOutput.hpp
Date: 2022-8-32
Author: Reece
***/
#pragma once
#include "AuNetWriteQueue.hpp"
namespace Aurora::IO::Net
{
struct SocketBase;
struct NtAsyncNetworkTransaction;
struct SocketChannelOutput : IAsyncFinishedSubscriber
{
SocketChannelOutput(SocketBase *pParent, const AuSPtr<IAsyncTransaction> &stream);
bool IsValid();
AuSPtr<IAsyncTransaction> ToWriteTransaction();
AuSPtr<Memory::ByteBuffer> AsWritableByteBuffer();
void ScheduleOutOfFrameWrite();
// Write outbound shit
void SchedWriteTick();
void SendIfData();
bool WriteTickLocked();
void WriteTick();
void OnEndOfReadTick();
void OnAsyncFileOpFinished(AuUInt64 offset, AuUInt32 length) override;
bool bShutdownOnComplete {};
AuByteBuffer &GetByteBuffer();
bool CanResize();
bool CanShutdown();
private:
friend struct SocketBase;
SocketBase * pParent_;
AuSPtr<IAsyncTransaction> pNetWriteTransaction_;
void * pOutSendPointer_ {};
AuByteBuffer outputBuffer_;
NetWriteQueue outputWriteQueue_;
AuUInt32 uCompleteCounter_ {};
AuThreadPrimitives::SpinLock lock_;
};
}