NAME AnyEvent::SIP - Fusing together AnyEvent and Net::SIP VERSION version 0.002 SYNOPSIS # regular Net::SIP syntax use AnyEvent::SIP; use Net::SIP::Simple; my $stopvar; my $ua = Net::SIP::Simple->new(...); my $call = $uac->invite( 'you.uas@example.com', cb_final => sub { $stopvar++ }, ); # wait for $stopvar, 5 second timeout $ua->loop( 5, \$stopvar ); # AnyEvent-style use AnyEvent::SIP; use Net::SIP::Simple; my $cv = AE::cv; my $ua = Net::SIP::Simple->new(...); my $call = $uac->invite( 'you.uas@example.com', cb_final => sub { $cv->send }, ); $cv->recv; # compat-mode use AnyEvent::SIP 'compat'; ... DESCRIPTION This module allows you to use AnyEvent as the event loop (and thus any other supported event loop) for Net::SIP. Net::SIP::Simple allows you to define the event loop. You can either define it using Net::SIP::Dispatcher::AnyEvent manually or you can simply use AnyEvent::SIP which will automatically set it for you. # doing it automatically and globally use AnyEvent::SIP; use Net::SIP::Simple; my $cv = AE::cv; my $ua = Net::SIP::Simple->new(...); $ua->register( cb_final => sub { $cv->send } ); $cv->recv; # defining it for a specific object use Net::SIP::Simple; use Net::SIP::Dispatcher::AnyEvent; my $cv = AE::cv; my $ua = Net::SIP::Simple->( ... loop => Net::SIP::Dispatcher::AnyEvent->new, ); $ua->register; $cv->recv; You can also call Net::SIP's "loop" method in order to keep it as close as possible to the original syntax. This will internally use AnyEvent, whether you're using AnyEvent::SIP globally or Net::SIP::Dispatcher::AnyEvent locally. use AnyEvent::SIP; use Net::SIP::Simple; my $stopvar; my $ua = Net::SIP::Simple->new(...); $ua->register( cb_final => sub { $stopvar++ } ); # call Net::SIP's event loop runner, # which calls AnyEvent's instead $ua->loop( 1, \$stopvar ); COMPATIBILITY Net::SIP requires dispatchers (event loops) to check their stopvars (condition variables) every single iteration of the loop. In my opinion, it's a wasteful and heavy operation. When it comes to loops like EV, they run a lot of cycles, and it's not very effecient and causes heavy load. To avoid that, the default mode for AnyEvent::SIP is to set up a timer to check the condition variables. Default interval is: 0.2 seconds. To configure this, you can set up the interval on import: use AnyEvent::SIP stopvar_interval => 0.1; ... If you want to keep AnyEvent::SIP completely compatible with the Net::SIP requirement (which fixes at least one bugfix test I haven't found out why yet), you can add the compat option on import; use AnyEvent::SIP 'compat'; ... I can't promise not to change any of this. AUTHOR Sawyer X COPYRIGHT AND LICENSE This software is copyright (c) 2013 by Sawyer X. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.