#pragma once #include "connection.hpp" #include "sasl_mechanism.hpp" #include #include struct Connection; struct IrcMsg; /** * @brief Thread to track this connection's identity, and IRC state. * */ class SelfThread { Connection &connection_; std::string nickname_; std::string mode_; std::unordered_set channels_; // RPL_ISUPPORT state std::unordered_map isupport_; std::unique_ptr sasl_mechanism_; auto on_welcome(const IrcMsg &irc) -> void; auto on_isupport(const IrcMsg &irc) -> void; auto on_nick(const IrcMsg &irc) -> void; auto on_umodeis(const IrcMsg &irc) -> void; auto on_join(const IrcMsg &irc) -> void; auto on_kick(const IrcMsg &irc) -> void; auto on_part(const IrcMsg &irc) -> void; auto on_mode(const IrcMsg &irc) -> void; auto on_authenticate(std::string_view) -> void; public: SelfThread(Connection &connection) : connection_{connection} { } static auto start(Connection &) -> std::shared_ptr; auto start_sasl(std::unique_ptr mechanism) -> void; auto get_my_nickname() const -> const std::string &; auto get_my_mode() const -> const std::string &; auto get_my_channels() const -> const std::unordered_set &; auto is_my_nick(std::string_view nick) const -> bool; auto is_my_mask(std::string_view nick) const -> bool; };