#pragma once #include "ControlServices.h" #include #include class OpenGLComposite; class RuntimeHost; class RuntimeStore; class RuntimeServices { public: using AppliedOscUpdate = ControlServices::AppliedOscUpdate; using CompletedOscCommit = ControlServices::CompletedOscCommit; RuntimeServices(); ~RuntimeServices(); bool Start(OpenGLComposite& composite, RuntimeHost& runtimeHost, std::string& error); void BeginPolling(RuntimeStore& runtimeStore); void Stop(); void BroadcastState(); void RequestBroadcastState(); bool QueueOscUpdate(const std::string& layerKey, const std::string& parameterKey, const std::string& valueJson, std::string& error); bool ApplyPendingOscUpdates(std::vector& appliedUpdates, std::string& error); bool QueueOscCommit(const std::string& routeKey, const std::string& layerKey, const std::string& parameterKey, const JsonValue& value, uint64_t generation, std::string& error); void ClearOscState(); void ConsumeCompletedOscCommits(std::vector& completedCommits); RuntimePollEvents ConsumePollEvents(); private: std::unique_ptr mControlServices; };