43 lines
1.2 KiB
C++
43 lines
1.2 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();
|
||
|
void WriteTick();
|
||
|
void OnEndOfReadTick();
|
||
|
|
||
|
void OnAsyncFileOpFinished(AuUInt64 offset, AuUInt32 length) override;
|
||
|
|
||
|
private:
|
||
|
SocketBase * pParent_;
|
||
|
AuSPtr<IAsyncTransaction> pNetWriteTransaction_;
|
||
|
void * pOutSendPointer_ {};
|
||
|
AuByteBuffer outputBuffer_;
|
||
|
NetWriteQueue outputWriteQueue_;
|
||
|
AuThreadPrimitives::SpinLock lock_;
|
||
|
};
|
||
|
}
|