AnyEvent-Campfire-Client

 view release on metacpan or  search on metacpan

lib/AnyEvent/Campfire/Client.pm  view on Meta::CPAN

package AnyEvent::Campfire::Client;
{
  $AnyEvent::Campfire::Client::VERSION = '0.0.2';
}

# Abstract: Campfire API in an event loop
use Moose;
use namespace::autoclean;

use AnyEvent;
use AnyEvent::HTTP::ScopedClient;
use AnyEvent::Campfire::Stream;
use URI;
use MIME::Base64;
use JSON::XS;
use Try::Tiny;

extends 'AnyEvent::Campfire';

has 'account' => (
    is  => 'ro',
    isa => 'Str'
);

has 'uri' => (
    is         => 'ro',
    isa        => 'URI',
    lazy_build => 1,
);

sub _build_uri {
    my $account = shift->account;
    return URI->new("https://$account.campfirenow.com/");
}

sub BUILD {
    my $self = shift;

    if ( !$self->authorization || !scalar @{ $self->rooms } || !$self->account )
    {
        print STDERR
          "Not enough parameters provided. I Need a token, rooms and account\n";
        exit(1);
    }

    for my $room ( @{ $self->rooms } ) {
        $self->post(
            "/room/$room/join",
            sub {
                my ( $body, $hdr ) = @_;
                if ( $hdr->{Status} !~ m/^2/ ) {
                    $self->emit( 'error', "$hdr->{Status}: $hdr->{Reason}" );
                    return;
                }

                $self->emit( 'join', $room );

                my $stream = AnyEvent::Campfire::Stream->new(
                    token => $self->token,
                    rooms => join( ',', @{ $self->rooms } ),
                );

                $stream->on( 'stream', $self->_events->{message}[0] );
                $stream->on( 'error',  $self->_events->{error}[0] );
            }
        );
    }
}



( run in 1.734 second using v1.01-cache-2.11-cpan-39bf76dae61 )