AuroraRuntime/Source/IO/Net/AuNetSocketChannel.hpp
Reece Wilson 7be2d3fbdc [+] AuUtility::ThroughputCalculator
[+] AuNet::ISocketStats
[+] AuNet::ISocketChannel::GetRecvStats()
[+] AuNet::ISocketChannel::GetSendStats()
[+] AuIO::IOProcessor::RunTickEx(AuUInt32 dwTimeout)
[*] Refactor clock APIs
[+] Documentation in headers
[+] AuIO::IIOPipeWork::GetStartTickMS()
[+] AuIO::IIOPipeWork::GetLastTickMS()
[+] AuIO::IIOPipeWork::GetPredictedThroughput()
[+] AuIO::IIOPipeWork::GetBytesProcessed()
2022-12-06 22:58:15 +00:00

105 lines
3.3 KiB
C++

/***
Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved.
File: AuNetSocketChannel.hpp
Date: 2022-8-16
Author: Reece
***/
#pragma once
#include "AuNetWriteQueue.hpp"
#include "AuNetSocketChannelInput.hpp"
#include "AuNetSocketChannelOutput.hpp"
#include "AuSocketStats.hpp"
namespace Aurora::IO::Net
{
struct SocketBase;
struct NtAsyncNetworkTransaction;
struct SocketChannel : ISocketChannel
{
SocketChannel(SocketBase *pParent);
bool IsValid();
AuSPtr<ISocket> ToParent() override;
void ScheduleOutOfFrameWrite() override;
AuSPtr<IAsyncTransaction> ToReadTransaction() override;
AuSPtr<IAsyncTransaction> ToWriteTransaction() override;
bool SpecifyTCPNoDelay(bool bFuckNagle) override;
bool SpecifyTransactionsHaveIOFence(bool bAllocateFence) override;
bool SpecifyBufferSize(AuUInt uBytes,
const AuSPtr<AuAsync::PromiseCallback<AuNullS, AuNullS>> &pCallbackOptional) override;
bool SpecifyOutputBufferSize(AuUInt uBytes,
const AuSPtr<AuAsync::PromiseCallback<AuNullS, AuNullS>> &pCallbackOptional) override;
bool SpecifyInputBufferSize(AuUInt uBytes,
const AuSPtr<AuAsync::PromiseCallback<AuNullS, AuNullS>> &pCallbackOptional) override;
bool SpecifyManualWrite(bool bEnableDirectAIOWrite) override;
bool SpecifyManualRead(bool bEnableDirectAIORead) override;
bool SpecifyPerTickAsyncReadLimit(AuUInt uBytes) override;
bool GetCurrentTCPNoDelay() override;
AuUInt GetInputBufferSize() override;
AuUInt GetOutputBufferSize() override;
AuSPtr<IStreamReader> AsStreamReader() override;
AuSPtr<Memory::ByteBuffer> AsReadableByteBuffer() override;
AuSPtr<IStreamWriter> AsStreamWriter() override;
AuSPtr<Memory::ByteBuffer> AsWritableByteBuffer() override;
AuSPtr<Protocol::IProtocolStack> NewProtocolRecvStack() override;
AuSPtr<Protocol::IProtocolStack> NewProtocolSendStack() override;
void SpecifyRecvProtocol(const AuSPtr<Protocol::IProtocolStack> &pRecvProtocol) override;
void SpecifySendProtocol(const AuSPtr<Protocol::IProtocolStack> &pSendProtocol) override;
AuSPtr<ISocketStats> GetRecvStats() override;
AuSPtr<ISocketStats> GetSendStats() override;
SocketStats & GetSendStatsEx();
SocketStats & GetRecvStatsEx();
void Establish();
void DoBufferResizeOnThread(bool bInput,
bool bOutput,
AuUInt uBytes,
const AuSPtr<AuAsync::PromiseCallback<AuNullS, AuNullS>> &pCallbackOptional);
SocketChannelOutput outputChannel;
SocketChannelInput inputChannel;
bool bIsManualRead {};
bool bIsManualWrite {};
bool bIsEstablished {};
bool bTcpNoDelay {};
AuUInt uBytesToFlip { 0 };
AuUInt uBytesInputBuffer { 0 };
AuUInt uBytesOutputBuffer { 0 };
AuSPtr<Protocol::IProtocolStack> pRecvProtocol;
AuSPtr<Protocol::IProtocolStack> pSendProtocol;
private:
SocketBase * pParent_;
SocketStats sendStats_;
SocketStats recvStats_;
};
}