#pragma once #include #include #include #include #include class ControlServer; class OpenGLComposite; class OscServer; class RuntimeHost; struct RuntimePollEvents { bool registryChanged = false; bool reloadRequested = false; bool failed = false; std::string error; }; class RuntimeServices { public: RuntimeServices(); ~RuntimeServices(); bool Start(OpenGLComposite& composite, RuntimeHost& runtimeHost, std::string& error); void BeginPolling(RuntimeHost& runtimeHost); void Stop(); void BroadcastState(); RuntimePollEvents ConsumePollEvents(); private: void StartPolling(RuntimeHost& runtimeHost); void StopPolling(); void PollLoop(RuntimeHost& runtimeHost); std::unique_ptr mControlServer; std::unique_ptr mOscServer; std::thread mPollThread; std::atomic mPollRunning; std::atomic mRegistryChanged; std::atomic mReloadRequested; std::atomic mPollFailed; std::mutex mPollErrorMutex; std::string mPollError; };