#ifndef WANDA_COMMANDER_HPP #define WANDA_COMMANDER_HPP #include "control_connection.hpp" #include "message.hpp" #include #include #include #include #include #include #include namespace wanda { struct commander : wanda::control_connection::listener { enum struct command_id : char { change, }; struct command { command_id const id; std::vector const arguments; std::optional message() const; }; struct listener { virtual void on_connected(commander & commander) { }; virtual void on_response(commander & commander, std::string response) { }; virtual void on_error(commander & commander, std::string error) { }; }; commander(asio::io_service &service, std::filesystem::path socket, listener & listener, std::shared_ptr logger); void start(); void send(command command); void on_error(control_connection::pointer connection, std::error_code error) override; void on_received(control_connection::pointer connection, message message) override; private: asio::io_service & m_service; wanda::control_connection::protocol::endpoint m_endpoint; wanda::control_connection::protocol::socket m_socket; wanda::control_connection::pointer m_connection; listener & m_listener; std::shared_ptr m_logger; }; } // namespace wanda #endif