44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <expected>
|
|
#include <cstdint>
|
|
#include <memory>
|
|
#include <mutex>
|
|
#include <string>
|
|
|
|
#include <boost/asio/any_io_executor.hpp>
|
|
|
|
#include <luma.hpp>
|
|
#include <modulus.hpp>
|
|
|
|
#include <vamp_zero/config.hpp>
|
|
#include <vamp_zero/types.hpp>
|
|
|
|
namespace vamp_zero {
|
|
|
|
struct ui_state {
|
|
vamp_zero::app_state app{};
|
|
std::string ap_ssid{};
|
|
std::string zero_ip{};
|
|
std::uint16_t port{8080};
|
|
};
|
|
|
|
class zero_ui {
|
|
public:
|
|
zero_ui(boost::asio::any_io_executor executor, luma::application_config config);
|
|
auto run() -> std::expected<void, modulus::error>;
|
|
auto stop() -> void;
|
|
auto publish(vamp_zero::ui_state state) -> std::expected<void, modulus::error>;
|
|
auto snapshot() const -> vamp_zero::ui_state;
|
|
private:
|
|
auto make_root(vamp_zero::ui_state const& state) -> std::expected<std::unique_ptr<luma::control>, modulus::error>;
|
|
boost::asio::any_io_executor executor_;
|
|
luma::application application_;
|
|
mutable std::mutex mutex_{};
|
|
vamp_zero::ui_state state_{};
|
|
};
|
|
|
|
auto make_ui_state(vamp_zero::config const& config, vamp_zero::app_state app) -> vamp_zero::ui_state;
|
|
|
|
}
|