如何解决将不推荐使用的 Perl 的 Net::IRC 代码转换为 AnyEvent::IRC::Client 查询
由于 Perl 的 Net::IRC 库已被弃用,我需要将一些使用它的旧代码转换为更新的 AnyEvent::IRC::Client。问题在于 MetaCPAN 的 AnyEvent 文档。不要显示与 IRC 数字事件代码以及 Net::IRC 支持的 add_global_handler() 和 add_handler() 方法的任何等效性。那么,例如,以下 AnyEvent::IRC::Client 语法中的 Net::IRC 代码片段的等价物是什么?任何见解都非常感谢。谢谢!
my $irc = new Net::IRC ;
my $conn = $irc->newconn( Server => ...,Port => ...,Nick => ... ) ;
$conn->add_global_handler( [ 251,252,253,254,255,302 ],\&on_init ) ;
$conn->add_global_handler( [ 422,376 ],\&on_connect ) ;
$conn->add_handler( 'crping',\&on_ping_reply ) ;
$conn->add_handler( 'caction',\&on_action ) ;
...
$irc->start ;
AnyEvent::IRC::Client ( ref: https://metacpan.org/pod/AnyEvent::IRC::Client ) 的文档只提供了 reg_cb() 方法,没有 IRC 数字代码处理程序,所以以下是我目前为止关于新代码的全部内容:>
my $condVar = AnyEvent->condvar ;
my $conn = AnyEvent::IRC::Client->new() ;
$conn->connect( $server,$port,... ) ;
$conn->reg_cb( crping => sub { ... } ) ;
$conn->reg_cb( caction => sub { ... } ) ;
my $timer = AnyEvent->timer (
after => $twoSecs,cb => sub {
$conn->disconnect ;
$condVar->send ;
}#end callback
) ;#end timer
$condVar->recv ;
undef( $timer ) ;
解决方法
您的帖子缺乏明确的问题。事实上,您的问题似乎在评论中,甚至没有表述为问题。
我在 AnyEvent::IRC:Client 中找不到任何关于如何处理 IRC 事件数字代码的文档
第二个片段中唯一缺少的部分似乎如下所示:
$conn->add_global_handler( [ 251,252,253,254,255,302 ],\&on_init ) ;
$conn->add_global_handler( [ 422,376 ],\&on_connect ) ;
所以我假设您在询问如何使用 AnyEvent::IRC::Client 处理这些事件。
分布中包含的来源和样本都建议您可以使用以下内容:
$conn->reg_cb("irc_$_" => \&on_init) for 251..255,302;
$conn->reg_cb("irc_$_" => \&on_connect) for 376,422;
如果没有,您可以使用以下方法来发现适当的标识符:
$conn->reg_cb(debug_recv => sub {
my ($msg) = @_;
say STDERR "Received irc_" . lc($msg->{command});
});
进一步研究代码后,irc_001
、irc_376
和 irc_422
导致 welcome
事件被触发,因此以下是更好的解决方案:>
$conn->reg_cb("irc_$_" => \&on_init) for 251..255,302;
$conn->reg_cb(welcome => \&on_connect);
还要注意 AnyEvent::IRC::Client 已经处理了来自服务器的 ping 消息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。