AnyEvent-Campfire-Stream
view release on metacpan or search on metacpan
lib/AnyEvent/Campfire/Stream.pm view on Meta::CPAN
package AnyEvent::Campfire::Stream;
{
$AnyEvent::Campfire::Stream::VERSION = '0.0.3';
}
# Abstract: Receive Campfire streaming API in an event loop
use Moose;
use namespace::autoclean;
extends 'AnyEvent::Campfire';
use AnyEvent;
use AnyEvent::HTTP;
use URI;
use JSON::XS;
use Try::Tiny;
sub BUILD {
my $self = shift;
if ( !$self->authorization || !scalar @{ $self->rooms } ) {
print STDERR
"Not enough parameters provided. I Need a token and rooms\n";
exit(1);
}
my %headers = (
Accept => '*/*',
Authorization => $self->authorization,
);
my $on_json = sub {
my $json = shift;
if ( $json !~ /^\s*$/ ) {
my $data;
try {
$data = decode_json($json);
$self->emit( 'stream', $data );
}
catch {
$self->emit( 'error', "Campfire data parse error: $_" );
};
}
};
my $on_header = sub {
my ($hdr) = @_;
if ( $hdr->{Status} !~ m/^2/ ) {
$self->emit( 'error', "$hdr->{Status}: $hdr->{Reason}" );
return;
}
return 1;
};
my $callback = sub {
my ( $handle, $headers ) = @_;
return unless $handle;
my $chunk_reader = sub {
my ( $handle, $line ) = @_;
$line =~ /^([0-9a-fA-F]+)/ or die 'bad chunk (incorrect length)';
my $len = hex $1;
$handle->push_read(
chunk => $len,
sub {
( run in 1.573 second using v1.01-cache-2.11-cpan-39bf76dae61 )