#include "irc_coroutine.hpp" auto irc_coroutine::is_running() -> bool { return promise().connection_ != nullptr; } auto irc_coroutine::exception() -> std::exception_ptr { return promise().exception_; } auto irc_coroutine::start(Connection& connection) -> void { promise().connection_ = connection.shared_from_this(); resume(); } void wait_command::await_suspend(std::coroutine_handle handle) { auto &connection = *handle.promise().connection_; ircmsg_connection_ = connection.sig_ircmsg.connect([this, handle](auto cmd, auto &msg) { auto const wanted = std::find(want_cmds_.begin(), want_cmds_.end(), cmd) != want_cmds_.end(); if (wanted) { unsubscribe(); resultCmd = cmd; resultMsg = &msg; handle.resume(); } }); disconnect_connection_ = connection.sig_disconnect.connect([this, handle]() { unsubscribe(); handle.resume(); }); }