xbot/irc_coroutine.cpp
2025-01-23 12:46:52 -08:00

32 lines
970 B
C++

#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<irc_promise> 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();
});
}