Преобразование устаревших кодов Perl Net::IRC в запрос AnyEvent::IRC::Client

Поскольку библиотека Perl Net::IRC устарела, мне нужно преобразовать некоторый старый код, который ее использует, в более новый AnyEvent::IRC::Client. Проблема в том, что документ AnyEvent MetaCPAN. не показывают никакой эквивалентности числовым кодам событий IRC и методам add_global_handler() и add_handler(), которые поддерживает Net::IRC. Так, например, что будет эквивалентно следующим фрагментам кода Net::IRC в синтаксисе AnyEvent::IRC::Client? Любое понимание очень ценится. Спасибо!

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 ) ;

person santa100    schedule 17.02.2021    source источник
comment
Что вы пробовали? Какая у вас проблема? отвечаем на конкретные вопросы; мы не служба написания программного обеспечения.   -  person ikegami    schedule 18.02.2021
comment
@ikegami, как уже говорилось, я НЕ смог найти никакой документации о том, как обрабатывать числовые коды событий IRC в AnyEvent::IRC:Client.   -  person santa100    schedule 18.02.2021
comment
Спасибо @toolic, судя по примерам, я могу использовать irc_‹codeNumber› для обработки числового кода события. Но по-прежнему нет эквивалента специфичному для Net::IRC add_global_handler() VS. методы add_handler().   -  person santa100    schedule 18.02.2021


Ответы (1)


В вашем сообщении отсутствует четкий вопрос. На самом деле ваш вопрос, кажется, есть в комментариях, и он даже не сформулирован как вопрос.

Мне НЕ удалось найти документацию о том, как обрабатывать числовые коды событий IRC в AnyEvent::IRC:Client

Это подтверждается тем фактом, что во втором фрагменте отсутствует только следующая часть:

$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 от сервера.

person ikegami    schedule 17.02.2021