#pragma once #include "connection.hpp" #include "client.hpp" #include "ref.hpp" #include #include #include #include class Registration : public std::enable_shared_from_this { public: struct Settings { std::string nickname; std::string username; std::string realname; std::string password; std::string sasl_mechanism; std::string sasl_authcid; std::string sasl_authzid; std::string sasl_password; Ref sasl_key; }; private: Settings settings_; std::shared_ptr client_; boost::signals2::scoped_connection slot_; boost::signals2::scoped_connection caps_slot_; auto on_connect() -> void; auto on_cap_list(const std::unordered_map &) -> void; auto on_ircmsg(IrcCommand, const IrcMsg &msg) -> void; auto send_req() -> void; auto randomize_nick() -> void; public: Registration( Settings, std::shared_ptr ); static auto start( Settings, std::shared_ptr ) -> std::shared_ptr; };