From ca992f4f76d09965e4e62c805daa02b23266a224 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 29 Nov 2018 18:29:34 +0100 Subject: control: begin control interface implementation --- src/control_interface.hpp | 55 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/control_interface.hpp (limited to 'src/control_interface.hpp') diff --git a/src/control_interface.hpp b/src/control_interface.hpp new file mode 100644 index 0000000..f95362c --- /dev/null +++ b/src/control_interface.hpp @@ -0,0 +1,55 @@ +#ifndef WANDA_CONTROL_INTERFACE_HPP +#define WANDA_CONTROL_INTERFACE_HPP + +#include "control_connection.hpp" +#include "keyed.hpp" + +#include +#include + +#include +#include +#include +#include +#include + +namespace wanda +{ + +struct socket_deleter +{ + ~socket_deleter(); + + std::filesystem::path path; +}; + +struct control_interface : control_connection::listener, keyed, std::enable_shared_from_this +{ + using protocol = boost::asio::local::stream_protocol; + using pointer = std::shared_ptr; + + control_interface(key, boost::asio::io_service &service, protocol::endpoint endpoint); + + boost::system::error_code start(); + + void on_received(control_connection::pointer connection, std::string message) override; + void on_close(control_connection::pointer) override; + + private: + void perform_accept(); + + friend pointer make_interface(boost::asio::io_service &service, std::filesystem::path file); + + boost::asio::io_service &m_service; + protocol::endpoint m_endpoint; + protocol::socket m_socket; + protocol::acceptor m_acceptor; + socket_deleter m_deleter{m_endpoint.path()}; + std::set m_connections; +}; + +control_interface::pointer make_interface(boost::asio::io_service &service, std::filesystem::path file); + +} // namespace wanda + +#endif \ No newline at end of file -- cgit v1.2.3