我一直在使用POE ::零组件:: IRC一个简单的IRC机器人。 它只有当我试图让它正常用,我发现,我不能让任何消息退出可言,以往无论是作为一个信号处理器的一部分,或者只是一个正常的呼叫到有用的信息戒烟处理SIGINT被放弃。
比方说,我已经得到了会话创建是这样的:
POE::Session->create( inline_states => { irc_disconnected => \&bot_reconnect, irc_error => \&bot_reconnect, irc_socketerr => \&bot_reconnect, connect => \&bot_reconnect, . . . }, );
而bot_reconnect
只是要回连接到IRC如果有什么地方错了:
sub bot_reconnect { my ($kernel, $heap) = @_[KERNEL, HEAP]; if (1 == $heap->{shutting_down}) { $heap->{irc}->yield(shutdown => 'blah'); } else { some_log_func("Reconnecting in 60 secs"); $kernel-delay(connect => 60); } }
如果,在代码中其他地方我设置shutting_down
为1,并告诉它退出(如$irc->yield(quit => "bye!")
立即退出IRC与不用退出消息(“客户退出”时, ircd的显示器),或者用“远程主机关闭了连接”。
然后,它接收irc_disconnected
事件这需要它来bot_reconnect
如上所述,在shutdown
似乎什么也不做。 事实上,如果我没有明确exit 0
后shutdown
则该过程刚好在中间状态保持不连接IRC更多。
是什么是应该发生的?
我发现:
http://search.cpan.org/~bingos/POE-Component-IRC-6.79/lib/POE/Component/IRC/Cookbook/Disconnecting.pod
它说,使用shutdown
。 正如你所看到的,我试过了,它似乎并没有工作。
我还发现了另一个问题,这一些示例代码:
我如何正确关机博特:: BasicBot BOT(基于POE ::零组件:: IRC)?
然而,这是非常相似,我现在有,也似乎没有任何表现不同。
的包的版本libpoe-component-irc-perl
是6.78 + DFSG-1,使得应大于6.50更大如上述URL表示。
有任何想法吗?