From bd69ad67394de1459089344bbd9220f33cfedf21 Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Fri, 20 Oct 2023 16:33:18 +0100 Subject: [PATCH] [+] IPCPipe::ToFileStream [+] IPCPipe::ToStreamReader [+] IPCPipe::ToStreamWriter --- Include/Aurora/IO/IPC/IPCPipe.hpp | 18 ++++++++++++++++++ Source/IO/IPC/AuIPCPipe.NT.cpp | 22 +++++++++++++++++++++- Source/IO/IPC/AuIPCPipe.NT.hpp | 11 ++++++++++- Source/IO/IPC/AuIPCPipe.Unix.cpp | 21 +++++++++++++++++++++ Source/IO/IPC/AuIPCPipe.Unix.hpp | 8 ++++++++ 5 files changed, 78 insertions(+), 2 deletions(-) diff --git a/Include/Aurora/IO/IPC/IPCPipe.hpp b/Include/Aurora/IO/IPC/IPCPipe.hpp index f2c0ec48..cf0b729f 100644 --- a/Include/Aurora/IO/IPC/IPCPipe.hpp +++ b/Include/Aurora/IO/IPC/IPCPipe.hpp @@ -57,6 +57,24 @@ namespace Aurora::IO::IPC * @return */ virtual bool Write(const Memory::MemoryViewStreamRead &read) = 0; + + /** + * @brief + * @return + */ + virtual AuSPtr ToFileStream() = 0; + + /** + * @brief + * @return + */ + virtual AuSPtr ToStreamReader() = 0; + + /** + * @brief + * @return + */ + virtual AuSPtr ToStreamWriter() = 0; }; /** diff --git a/Source/IO/IPC/AuIPCPipe.NT.cpp b/Source/IO/IPC/AuIPCPipe.NT.cpp index c5492973..fa0cf6ad 100644 --- a/Source/IO/IPC/AuIPCPipe.NT.cpp +++ b/Source/IO/IPC/AuIPCPipe.NT.cpp @@ -101,6 +101,12 @@ namespace Aurora::IO::IPC AuStaticCast(this->fsHandle_)->bIsAsync = true; AuStaticCast(this->fsHandle_)->pIPCPipe = this; + this->fsBlockingStream_ = AuFS::OpenBlockingFileStreamFromHandle(this->fsHandle_); + SysAssert(this->fsBlockingStream_); + + this->fsStreamReader_ = AuMakeSharedPanic(this->fsBlockingStream_); + this->fsStreamWriter_ = AuMakeSharedPanic(this->fsBlockingStream_); + this->fsStream_->Init(this->fsHandle_); TryConnect(); @@ -225,7 +231,6 @@ namespace Aurora::IO::IPC return true; } - OVERLAPPED a {}; a.hEvent = CreateEventA(NULL, true, 0, NULL); @@ -335,6 +340,21 @@ namespace Aurora::IO::IPC AuString {}; } + AuSPtr IPCPipeImpl::ToFileStream() + { + return this->fsBlockingStream_; + } + + AuSPtr IPCPipeImpl::ToStreamReader() + { + return this->fsStreamReader_; + } + + AuSPtr IPCPipeImpl::ToStreamWriter() + { + return this->fsStreamWriter_; + } + AUKN_SYM AuSPtr NewPipeEx(AuUInt32 uBytesLength) { IPC::IPCHandle handle; diff --git a/Source/IO/IPC/AuIPCPipe.NT.hpp b/Source/IO/IPC/AuIPCPipe.NT.hpp index 2aee03c5..b7833304 100644 --- a/Source/IO/IPC/AuIPCPipe.NT.hpp +++ b/Source/IO/IPC/AuIPCPipe.NT.hpp @@ -22,7 +22,9 @@ namespace Aurora::IO::IPC struct IPCHasConnectionEvent; struct IPCHandle; - struct IPCPipeImpl : IPCPipe, Loop::LSHandle, AuEnableSharedFromThis + struct IPCPipeImpl : IPCPipe, + Loop::LSHandle, + AuEnableSharedFromThis { IPCPipeImpl(HANDLE clientHandle, HANDLE serverHandle, const IPCHandle &handle); ~IPCPipeImpl(); @@ -39,6 +41,10 @@ namespace Aurora::IO::IPC virtual bool Write(const Memory::MemoryViewStreamRead &read) override; virtual AuString ExportToString() override; + virtual AuSPtr ToFileStream() override; + virtual AuSPtr ToStreamReader() override; + virtual AuSPtr ToStreamWriter() override; + bool IsSignaled() override; bool WaitOn(AuUInt32 timeout) override; Loop::ELoopSource GetType() override; @@ -60,5 +66,8 @@ namespace Aurora::IO::IPC AuSPtr fsStream_; AuSPtr lshasConnection_; bool bFirstTime {true}; + AuSPtr fsBlockingStream_; + AuSPtr fsStreamReader_; + AuSPtr fsStreamWriter_; }; } \ No newline at end of file diff --git a/Source/IO/IPC/AuIPCPipe.Unix.cpp b/Source/IO/IPC/AuIPCPipe.Unix.cpp index 92073f1b..576834d9 100644 --- a/Source/IO/IPC/AuIPCPipe.Unix.cpp +++ b/Source/IO/IPC/AuIPCPipe.Unix.cpp @@ -170,6 +170,12 @@ namespace Aurora::IO::IPC this->fsHandle_->InitFromPairMove(fds2[0], fds2[1]); this->fsStream_->Init(this->fsHandle_); + + this->fsBlockingStream_ = AuFS::OpenBlockingFileStreamFromHandle(this->fsHandle_); + SysAssert(this->fsBlockingStream_); + + this->fsStreamReader_ = AuMakeSharedPanic(this->fsBlockingStream_); + this->fsStreamWriter_ = AuMakeSharedPanic(this->fsBlockingStream_); } AuSPtr IPCPipeImpl::AsReadChannelIsOpen() @@ -364,6 +370,21 @@ namespace Aurora::IO::IPC return handle.ToString(); } + AuSPtr IPCPipeImpl::ToFileStream() + { + return this->fsBlockingStream_; + } + + AuSPtr IPCPipeImpl::ToStreamReader() + { + return this->fsStreamReader_; + } + + AuSPtr IPCPipeImpl::ToStreamWriter() + { + return this->fsStreamWriter_; + } + AUKN_SYM AuSPtr NewPipeEx(AuUInt32 uPipeLength) { IPCToken readEnd, writeEnd; diff --git a/Source/IO/IPC/AuIPCPipe.Unix.hpp b/Source/IO/IPC/AuIPCPipe.Unix.hpp index 0290fcb5..0b4f8a7a 100644 --- a/Source/IO/IPC/AuIPCPipe.Unix.hpp +++ b/Source/IO/IPC/AuIPCPipe.Unix.hpp @@ -62,6 +62,10 @@ namespace Aurora::IO::IPC virtual bool Write(const Memory::MemoryViewStreamRead &read) override; virtual AuString ExportToString() override; + virtual AuSPtr ToFileStream() override; + virtual AuSPtr ToStreamReader() override; + virtual AuSPtr ToStreamWriter() override; + bool ReadEx(const Memory::MemoryViewStreamWrite &write, bool nonblock, bool bSide); bool IsSignaled() override; @@ -105,6 +109,10 @@ namespace Aurora::IO::IPC bool bHasDied {}; + AuSPtr fsBlockingStream_; + AuSPtr fsStreamReader_; + AuSPtr fsStreamWriter_; + void FinishFinalize(); }; } \ No newline at end of file