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