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 )