32 lines
970 B
C++
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();
|
|
});
|
|
}
|