#pragma once #include "ControlServices.h" #include #include class OpenGLComposite; class RuntimeCoordinator; class RuntimeStore; class RuntimeServices { public: using AppliedOscUpdate = ControlServices::AppliedOscUpdate; using CompletedOscCommit = ControlServices::CompletedOscCommit; RuntimeServices(); ~RuntimeServices(); bool Start(OpenGLComposite& composite, RuntimeStore& runtimeStore, std::string& error); void BeginPolling(RuntimeCoordinator& runtimeCoordinator); 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); void ConsumeRuntimeCoordinatorResults(std::vector& results); private: std::unique_ptr mControlServices; };