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_down
1 に設定して終了するように指示した場合 (例 $irc->yield(quit => "bye!")
)、IRC をすぐに終了し、終了メッセージ (「クライアント終了」、ircd が表示されます) を表示しないか、「リモート ホストが接続を閉じました」を表示します。
次に、何もしないように見える上に移動するirc_disconnected
イベントを
受け取ります。実際、その後明示的に行わないと
、プロセスは IRC に接続できなくなり、宙に浮いたままになります。bot_reconnect
shutdown
exit 0
shutdown
それは起こるべきことですか?
私が見つけた:
使用すると言われていますshutdown
。ご覧のとおり、私はそれを試しましたが、うまくいかないようです。
別の質問でこれのサンプルコードも見つけました:
Bot::BasicBot ボット (POE::Component::IRC に基づく) を正しくシャットダウンするにはどうすればよいですか?
ただし、それは私が現在持っているものと非常によく似ており、動作も異なるようには見えません。
のパッケージ バージョンlibpoe-component-irc-perl
は 6.78+dfsg-1 であるため、上記の URL にあるように 6.50 以上である必要があります。
何か案は?