#pragma once #include "event.hpp" #include "settings.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "ircmsg.hpp" #include "irc_command.hpp" class Connection : public std::enable_shared_from_this { private: boost::asio::ip::tcp::socket stream_; boost::asio::steady_timer write_timer_; std::list write_strings_; auto writer() -> void; auto writer_immediate() -> void; public: Connection(boost::asio::io_context & io); boost::signals2::signal sig_connect; boost::signals2::signal sig_disconnect; boost::signals2::signal sig_ircmsg; auto get_executor() -> boost::asio::any_io_executor { return stream_.get_executor(); } /// Write bytes into the socket. Messages should be properly newline terminated. auto write_line(std::string message) -> void; auto connect( boost::asio::io_context & io, std::string host, std::string port ) -> boost::asio::awaitable; auto close() -> void; };