aboutsummaryrefslogtreecommitdiff
path: root/src/control_interface.hpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2018-11-30 16:52:54 +0100
committerFelix Morgner <felix.morgner@gmail.com>2018-11-30 16:52:54 +0100
commit3abece6f0a7edca476ee0c493f30dda8f8bcefd5 (patch)
treee794f512a262cca92db6d0a5f9d41b6be64d9db0 /src/control_interface.hpp
parent9c2231c8fb45f32c7b1d23e14125bc58ea405e60 (diff)
downloadwanda-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.hpp13
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);