Reece Wilson
f43251c8fc
[+] AuFS::UpdateTimes [+] AuFS::UpdateFileTimes [+] AuFS::CompressEx [*] AuFS::Compress now rejects files that look to be already compressed [+] AuFS::DecompressEx [+] AuFS::Create [+] AuFS::WriteNewFile [+] AuFS::WriteNewString [+] AuFs::FileAttrsList [+] AuFs::FileAttrsGet [+] AuFs::FileAttrsSet [+] DirectoryLogger::uMaxLogsOrZeroBeforeCompress [+] ISocketChannel.AddEventListener [+] ISocketChannel.AddEventListener [+] DirectoryLogger.uMaxLogsOrZeroBeforeCompress [*] Fix UNIX regression [*] Fix up stream socket channel realloc IPC [*] Fix shutdown regression in pretty much everything thanks to 8ff81df1's dumbass fix (fixes fence regression on shutdown) [*] Fix DirDeleterEx formatting of reported failed paths [*] Fix up file not truncated if already exists bugs. Extended and alternative apis added. [*] Fix ICompressionStream::ReadEx returning the wrong read value [+] Legacy compression API can now self-correct once newer stream processor objects are added
119 lines
3.9 KiB
C++
119 lines
3.9 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;
|
|
|
|
void AddEventListener(const AuSPtr<ISocketChannelEventListener> &pListener) override;
|
|
|
|
void RemoveEventListener(const AuSPtr<ISocketChannelEventListener> &pListener) 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 };
|
|
|
|
AuUInt uBytesInputBufferRetarget { 0 };
|
|
AuSPtr<AuAsync::PromiseCallback<AuNullS, AuNullS>> pRetargetInput;
|
|
AuUInt uBytesOutputBufferRetarget { 0 };
|
|
AuSPtr<AuAsync::PromiseCallback<AuNullS, AuNullS>> pRetargetOutput;
|
|
|
|
void DoReallocWriteTick();
|
|
void DoReallocReadTick();
|
|
|
|
AuSPtr<Protocol::IProtocolStack> pRecvProtocol;
|
|
AuSPtr<Protocol::IProtocolStack> pSendProtocol;
|
|
|
|
AuThreadPrimitives::SpinLock spinLock;
|
|
AuList<AuSPtr<ISocketChannelEventListener>> eventListeners;
|
|
|
|
private:
|
|
SocketBase * pParent_;
|
|
SocketStats sendStats_;
|
|
SocketStats recvStats_;
|
|
};
|
|
} |