perl - 将不推荐使用的 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 的文档(参考: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 消息。
推荐阅读
- networking - 如何通过停止和等待计算持久并行连接?
- ruby-on-rails - 基于 1 个对象检查 2 个条件的更好方法
- null - 所有函数调用都是空的?
- android - 如何强制自定义选项卡每次都作为桌面站点启动?
- alibaba-cloud-oss - 为什么阿里云OSS设置了上传文件大小,但还是有超过文件大小的问题
- phabricator - Phabricator 不发送出站电子邮件
- arduino - DFRobot pH 传感器 v2 使用按钮校准
- python - 为什么用于句子分类的pytorch线性层中的半梯度为零
- highcharts - 如何在堆叠条形图中保留条形以进行顺序
- html - HTML / CSS:防止文本输入表单时覆盖背景颜色