diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2018-11-30 16:52:54 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2018-11-30 16:52:54 +0100 |
| commit | 3abece6f0a7edca476ee0c493f30dda8f8bcefd5 (patch) | |
| tree | e794f512a262cca92db6d0a5f9d41b6be64d9db0 /src/control_interface.hpp | |
| parent | 9c2231c8fb45f32c7b1d23e14125bc58ea405e60 (diff) | |
| download | wanda-3abece6f0a7edca476ee0c493f30dda8f8bcefd5.tar.xz wanda-3abece6f0a7edca476ee0c493f30dda8f8bcefd5.zip | |
core: stop ownership circles in connection
Diffstat (limited to 'src/control_interface.hpp')
| -rw-r--r-- | src/control_interface.hpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/control_interface.hpp b/src/control_interface.hpp index c69aeb4..51d8c62 100644 --- a/src/control_interface.hpp +++ b/src/control_interface.hpp @@ -7,11 +7,14 @@ #include <boost/asio.hpp> #include <boost/system/error_code.hpp> +#include <cstddef> #include <filesystem> #include <istream> +#include <map> #include <memory> #include <set> #include <string> +#include <type_traits> namespace wanda { @@ -33,9 +36,16 @@ struct control_interface : control_connection::listener, keyed<control_interface boost::system::error_code start(); boost::system::error_code shutdown(); - void on_close(control_connection::pointer) override; + void on_close(control_connection::pointer connection) override; + void on_received(control_connection::pointer connection, message message) override; private: + enum struct state : std::underlying_type_t<std::byte> + { + fresh, + greeted, + }; + void perform_accept(); friend pointer make_interface(boost::asio::io_service &service, std::filesystem::path file); @@ -46,6 +56,7 @@ struct control_interface : control_connection::listener, keyed<control_interface protocol::acceptor m_acceptor; socket_deleter m_deleter{m_endpoint.path()}; std::set<control_connection::pointer> m_connections; + std::map<control_connection::pointer, state> m_states; }; control_interface::pointer make_interface(boost::asio::io_service &service, std::filesystem::path file); |
