AnyEvent-FreeSWITCH

 view release on metacpan or  search on metacpan

lib/AnyEvent/FreeSWITCH.pm  view on Meta::CPAN

package AnyEvent::FreeSWITCH;

use 5.006;
use AnyEvent;
use Object::Event;
use ESL;
use Carp;
use strict;
use warnings;

our @ISA = qw/Object::Event/;

=head1 NAME

AnyEvent::FreeSWITCH - The great new AnyEvent::FreeSWITCH!

=head1 VERSION

Version 0.01

=cut

our $VERSION = '0.01';


=head1 SYNOPSIS

Quick summary of what the module does.

Perhaps a little code snippet.

    use AnyEvent::FreeSWITCH;

    my $foo = AnyEvent::FreeSWITCH->new();
    ...

=head1 SUBROUTINES/METHODS

=head2 new

=cut

sub new {
    my ($this, %args) = @_;    
    my $class = ref($this) || $this;
    my $self = bless(\%args, $class);
    
    $self->{host}     ||= '127.0.0.1';
    $self->{port}     ||= '8021';
    $self->{password} ||= 'ClueCon';
    $self->{events}   ||= 'all';
    
    return $self;
}

=head2 connect

=cut

sub connect {
    my $self = shift;
    
    $self->{esl} = new ESL::ESLconnection(
	$self->{host},
	$self->{port},
	$self->{password},
	);
    if ( $self->is_connected() ) {
	$self->event('connected');
	$self->{io} = AnyEvent->io(
	    fh => $self->{esl}->socketDescriptor(),
	    poll => "r",
	    cb => sub { $self->recv_events(); },
	    );
    } else {
	$self->event('error_connection');
    }
    
    $self->{esl}->events('plain', $self->{events});

}

=head2 recv_events

=cut

sub recv_events {
    my $self = shift;

    my $e = $self->{esl}->recvEventTimed(0);

    if( defined $e ) {
	$self->event('recv_event', $e->getType(), $e->serialize('json'));
	$self->event('event_'. $e->getType(), $e->serialize('json'));
    } 
}

=head2 is_connected

=cut

sub is_connected {
    my $self = shift;

    return $self->{esl}->connected();
}

=head2 api

=cut

sub api {
    my $self = shift;
    my $command = shift;
    my $args = shift;
    
    if ( not $self->is_connected() ) {
	$self->event('connection_error', "Error trying to run api command: $command $args");
	return undef;
    }
    
    my $e = $self->{esl}->api($command, $args);
    return $e->getBody();
}

=head1 AUTHOR



( run in 3.348 seconds using v1.01-cache-2.11-cpan-df04353d9ac )