/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: IPCSink.hpp Date: 2022-6-16 Author: Reece ***/ #pragma once namespace Aurora::Logging::Sinks { struct IPCSink : IIPCLogger { IPCSink(const AuSPtr &pipe, bool lengthPrefixed); AuSPtr ToPipe() override; bool Init(); void OnMessageBlocking(AuUInt8 level, const ConsoleMessage &msg) override; bool OnMessageNonblocking(AuUInt8 level, const ConsoleMessage &msg) override; void OnFlush() override; private: AuSPtr pipe_; AuByteBuffer logBuffer_; AuThreadPrimitives::MutexUnique_t logMutex_; bool lengthPrefixed_; }; void NewIPCSinkRelease(IIPCLogger *logger); IIPCLogger *NewIPCSinkNew(const AuString &str, bool lengthPrefixed); }