The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
#
# Example script to show how to use Asterisk::CoroManager
# Really just a version of t/coro_manager.t
#
# Written by: Fredrik Liljegre <fredrik@liljegren.org>
#

use strict;
use warnings;
use Coro;
use Carp qw( croak longmess );

use lib './lib', '../lib';
use Asterisk::CoroManager;

our $ASTMAN = Asterisk::CoroManager->new({
                                          host   => 'ratatosk',
                                          user   => 'autotester',
                                          secret => 'autotester',
                                         });

$ASTMAN->connect || die "Couldn't connect";

# Add an event handler for user event AutoTest
$ASTMAN->add_uevent_callback( 'AutoTest', sub{ print "Got a user event AutoTest.\n" });

# Add a default user event handler
$ASTMAN->add_default_uevent_callback( sub{ print "Got an unhandled user event.\n" });

async {
    # Sent UserEvent to asterisk server.  It should trigger that
    # UserEvent, being catched by handler above
    $ASTMAN->sendcommand({
                          Action => 'UserEvent',
                          UserEvent => 'AutoTest',
                         });

    # Another UserEvent, to be caught by default user event handler.
    $ASTMAN->sendcommand({
                          Action => 'UserEvent',
                          UserEvent => 'SomeOtherTest',
                         });

    # Trying a sendcommand with hash-ref returning
    my $resp = $ASTMAN->sendcommand({ Action => 'Ping' });
    if (ref $resp eq 'HASH' and
        $resp->{Ping} eq 'Pong'
       ) {
        print "1. Got pong!\n";
    }
    else {
        print "1. Didn't get Pong :-(\n";
    }

    # Trying a sendcommand with hash returning
    my %resp = $ASTMAN->sendcommand({ Action => 'Ping' });
    if ($resp{Ping} eq 'Pong') {
        print "2. Got pong!\n";
    }
    else {
        print "2. Didn't get Pong :-(\n";
    }

    $ASTMAN->disconnect;
};

$ASTMAN->eventloop;