POE::Component::IRC を使用した単純な IRC ボットがあります。シグナルハンドラの一部であろうと、通常の終了する。
次のようなセッションを作成したとしましょう。
POE::Session->create(
inline_states => {
irc_disconnected => \&bot_reconnect,
irc_error => \&bot_reconnect,
irc_socketerr => \&bot_reconnect,
接続 => \&bot_reconnect,
.
.
.
}、
);
bot_reconnect何か問題が発生した場合は、IRC に接続し直します。
サブ bot_reconnect
{
my ($kernel, $heap) = @_[KERNEL, HEAP];
if (1 == $heap->{shutting_down}) {
$heap->{irc}->yield(shutdown => '何とか');
} そうしないと {
some_log_func("60 秒後に再接続");
$kernel-delay(connect => 60);
}
}
コードのどこかでshutting_down1 に設定して終了するように指示した場合 (例 $irc->yield(quit => "bye!"))、IRC をすぐに終了し、終了メッセージ (「クライアント終了」、ircd が表示されます) を表示しないか、「リモート ホストが接続を閉じました」を表示します。
次に、何もしないように見える上に移動するirc_disconnectedイベントを
受け取ります。実際、その後明示的に行わないと
、プロセスは IRC に接続できなくなり、宙に浮いたままになります。bot_reconnectshutdownexit 0shutdown
それは起こるべきことですか?
私が見つけた:
使用すると言われていますshutdown。ご覧のとおり、私はそれを試しましたが、うまくいかないようです。
別の質問でこれのサンプルコードも見つけました:
Bot::BasicBot ボット (POE::Component::IRC に基づく) を正しくシャットダウンするにはどうすればよいですか?
ただし、それは私が現在持っているものと非常によく似ており、動作も異なるようには見えません。
のパッケージ バージョンlibpoe-component-irc-perlは 6.78+dfsg-1 であるため、上記の URL にあるように 6.50 以上である必要があります。
何か案は?