diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2018-12-01 19:59:51 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2018-12-01 19:59:51 +0100 |
| commit | 63ec195c36dc331cd77df721d45449a642e8a546 (patch) | |
| tree | f9fc76c1965b35258825959935b1112f34077918 /src/control_interface.cpp | |
| parent | 56e57082a7e543155fcf583d146f4e130456ca73 (diff) | |
| download | wanda-63ec195c36dc331cd77df721d45449a642e8a546.tar.xz wanda-63ec195c36dc331cd77df721d45449a642e8a546.zip | |
wandad: implement command handler for change
Diffstat (limited to 'src/control_interface.cpp')
| -rw-r--r-- | src/control_interface.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/control_interface.cpp b/src/control_interface.cpp index b8ca58e..0a98553 100644 --- a/src/control_interface.cpp +++ b/src/control_interface.cpp @@ -1,4 +1,5 @@ #include "control_interface.hpp" +#include "optional.hpp" #include <spdlog/fmt/ostr.h> @@ -25,12 +26,13 @@ socket_deleter::~socket_deleter() // 'control_interface' implementation -control_interface::control_interface(control_interface::key key, asio::io_service &service, control_interface::protocol::endpoint endpoint, std::shared_ptr<spdlog::logger> logger) +control_interface::control_interface(control_interface::key key, asio::io_service &service, control_interface::protocol::endpoint endpoint, listener & listener, std::shared_ptr<spdlog::logger> logger) : keyed{key}, m_service{service}, m_endpoint{std::move(endpoint)}, m_socket{m_service}, m_acceptor{m_service}, + m_listener{listener}, m_logger{logger} { } @@ -105,6 +107,8 @@ void control_interface::on_close(control_connection::pointer connection) void control_interface::on_received(control_connection::pointer connection, message message) { + using namespace wanda::std_ext; + if (m_connections.find(connection) == m_connections.cend()) { m_logger->error("received message from an unknown connection"); @@ -129,11 +133,13 @@ void control_interface::on_received(control_connection::pointer connection, mess } else { - m_logger->warn("ignoring unknown message '{}'", message); + with(make_command(message), [&](auto const & command){ + m_listener.on_received(*this, command); + }) || [&] { m_logger->warn("ignoring unknown message '{}'", message); }; } } -control_interface::pointer make_interface(asio::io_service &service, std::filesystem::path file, std::shared_ptr<spdlog::logger> logger) +control_interface::pointer make_interface(asio::io_service &service, std::filesystem::path file, control_interface::listener & listener, std::shared_ptr<spdlog::logger> logger) { if (std::filesystem::exists(file)) { @@ -142,7 +148,7 @@ control_interface::pointer make_interface(asio::io_service &service, std::filesy } control_interface::protocol::endpoint endpoint{file.string()}; - return std::make_shared<control_interface>(control_interface::key{}, service, std::move(endpoint), logger); + return std::make_shared<control_interface>(control_interface::key{}, service, std::move(endpoint), listener, logger); } } // namespace wanda
\ No newline at end of file |
