smartirc4net ライブラリを使用する IRC ボットがあります。ボットがコマンドをリッスンしているという問題に遭遇しました。ボットが実行されているスレッドを終了させたいのです。コマンドはListen()
永久にブロックされます。使用する場合ListenOnce()
、呼び出しをWhile(!ShouldExit)
ループ内に配置できますが、ボットが何かをトリガーするのを待つ必要がありListenOnce()
ます。
protected void irc_OnConnected(object sender, EventArgs e)
{
irc.Login(configuration.IRCNick, configuration.IRCNick);
while (!_shouldDisconnect)
{
irc.ListenOnce();
}
irc.Disconnect();
}
回避策として、ボットが親スレッドから切断コマンドを発行されると、ボット自体にメッセージが送信されます。
/// <summary>
/// Used by the parent thread to disconnect the bot
/// </summary>
/// <returns></returns>
public void Disconnect()
{
_shouldDisconnect = true;
irc.SendMessage(SendType.Message, irc.Nickname, "EXIT YOU STUPID BOT");
}
ListenOnce()
これにより、while ループをループバックするイベントがトリガーされ、正常に切断されます。私はこれに間違ってアプローチしていますか? ボットをすぐに切断させるためのよりクリーンなアプローチはありますか?