/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AsyncApp.hpp Date: 2021-6-26 Author: Reece ***/ #pragma once #include "ThreadPool.hpp" namespace Aurora::Async { void InitApp(); void ReleaseApp(); struct AsyncApp : public IAsyncApp, ThreadPool { bool Spawn(WorkerId_t workerId) override; void SetRunningMode(bool eventRunning) override; bool Create(WorkerId_t workerId) override; bool InRunnerMode() override; bool Poll() override; bool RunOnce() override; bool Run() override; void Shutdown() override; bool Exiting() override; AuSPtr NewWorkItem(const WorkerId_t &worker, const AuSPtr &task, bool supportsBlocking) override; AuSPtr NewFence() override; Threading::Threads::ThreadShared_t ResolveHandle(WorkerId_t) override; AuBST> GetThreads() override; WorkerId_t GetCurrentThread() override; bool Sync(WorkerId_t workerId, AuUInt32 timeoutMs = 0, bool requireSignal = false) override; void Signal(WorkerId_t workerId) override; void SyncAllSafe() override; void AddFeature(WorkerId_t id, AuSPtr feature, bool async) override; void AssertInThreadGroup(ThreadGroup_t group) override; void AssertWorker(WorkerId_t id) override; bool ScheduleLoopSource(const AuSPtr &loopSource, WorkerId_t workerId, AuUInt32 timeout, const AuConsumer, bool> &callback) override; // Main thread logic void Start() override; void Main() override; void SetConsoleCommandDispatcher(WorkerId_t id) override; void CleanUpWorker(WorkerId_t wid) override; void CleanWorkerPoolReservedZeroFree() override; AuOptional commandDispatcher_; }; }