aboutsummaryrefslogtreecommitdiff
path: root/src/commander.hpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2018-12-01 19:03:33 +0100
committerFelix Morgner <felix.morgner@gmail.com>2018-12-01 19:03:33 +0100
commit2be129ac64d2540dc42f89bac85d24d4557aa59f (patch)
tree1df65973d162a1c36ab75c06b7101a81285160ea /src/commander.hpp
parent927caf94ad0d7b98d4b2c3833da8f0f2707d4f87 (diff)
downloadwanda-2be129ac64d2540dc42f89bac85d24d4557aa59f.tar.xz
wanda-2be129ac64d2540dc42f89bac85d24d4557aa59f.zip
wandac: implement very basic command line interface
Diffstat (limited to 'src/commander.hpp')
-rw-r--r--src/commander.hpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/commander.hpp b/src/commander.hpp
index e7d68af..abc7643 100644
--- a/src/commander.hpp
+++ b/src/commander.hpp
@@ -9,16 +9,39 @@
#include <filesystem>
#include <memory>
+#include <optional>
#include <string>
+#include <vector>
namespace wanda
{
struct commander : wanda::control_connection::listener
{
- commander(asio::io_service &service, std::filesystem::path socket, std::shared_ptr<spdlog::logger> logger);
+ enum struct command_id : char
+ {
+ change,
+ };
+
+ struct command
+ {
+ command_id const id;
+ std::vector<std::string> const arguments;
+
+ std::optional<wanda::message> 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<spdlog::logger> 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;
@@ -28,6 +51,7 @@ private:
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<spdlog::logger> m_logger;
};