#pragma once #include "IPCHandle.hpp" #include "IPCPrimitives.Linux.hpp" namespace Aurora::IO::IPC { struct IMutexClosedHook { virtual bool OnClosed() = 0; }; // IPC::IPCHandle handle; struct IPCPipeImpl; struct IPCMutexProxy : IPCMutex, Loop::ILoopSourceEx { IPCMutexProxy(AuUInt32 index); IPCMutexProxy(int handle, AuSPtr mem, AuUInt32 index); ~IPCMutexProxy(); PROXY_INTERNAL_INTERFACE(mutex_) bool Unlock() override; bool IsSignaled() override; bool WaitOn(AuUInt32 timeout) override; Loop::ELoopSource GetType() override; AuString ExportToString() override; private: bool bOwned {}; IPCToken token_; AuSPtr mem_; AuUInt32 index_; Loop::LSMutex mutex_; friend IPCPipeImpl; }; AuSPtr ImportMutexEx(const IPCToken &handle, const IPCToken &mem, AuUInt32 index); }