diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2018-11-29 18:29:34 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2018-11-29 18:29:34 +0100 |
| commit | ca992f4f76d09965e4e62c805daa02b23266a224 (patch) | |
| tree | 07eaeae4e288832306c353dd46cd3c2e52b8b5db /src/control_interface.hpp | |
| parent | d018603b1ff8e93902e8c9c904199f54076154c4 (diff) | |
| download | wanda-ca992f4f76d09965e4e62c805daa02b23266a224.tar.xz wanda-ca992f4f76d09965e4e62c805daa02b23266a224.zip | |
control: begin control interface implementation
Diffstat (limited to 'src/control_interface.hpp')
| -rw-r--r-- | src/control_interface.hpp | 55 |
1 files changed, 55 insertions, 0 deletions
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 <boost/asio.hpp> +#include <boost/system/error_code.hpp> + +#include <filesystem> +#include <istream> +#include <memory> +#include <set> +#include <string> + +namespace wanda +{ + +struct socket_deleter +{ + ~socket_deleter(); + + std::filesystem::path path; +}; + +struct control_interface : control_connection::listener, keyed<control_interface>, std::enable_shared_from_this<control_interface> +{ + using protocol = boost::asio::local::stream_protocol; + using pointer = std::shared_ptr<control_interface>; + + 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<control_connection::pointer> 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 |
