AnyEvent-Lingr
view release on metacpan or search on metacpan
- added one more missing prereq: URI
0.05 2013-03-18T16:09:00+09:00
- fixed a bug that 'cb' parameter of say method should be optional, but not in 0.04
0.04 2013-03-18T09:14:00+09:00
- added a missing prereq.
0.03 2013-03-18T09:09:00+09:00
- added a callback for say method for getting API response. (xaicron)
- fixed some debug messages
0.02 2013-03-15T11:45:00+09:00
- change observe event timeout 300 to 60
- fixed observe event error message was undef on http level error.
0.01 2013-03-14T18:50:00+09:00
- initial version
lib/AnyEvent/Lingr.pm view on Meta::CPAN
if (my $cb = $self->on_error) {
if ($res) {
$cb->($res->{detail});
}
else {
$cb->($hdr->{Status} . ': ' . $hdr->{Reason});
}
}
else {
debugf 'on_error callback does not set';
critf "res:%s hdr:%s", ddf($res), ddf($hdr);
}
}
sub start_session {
my ($self) = @_;
debugf "starting session...";
if ($self->session) {
debugf "found old session:%s reusing...", $self->session;
$self->get('session/verify', { session => $self->session }, sub {
my ($res, $hdr) = @_;
return unless $self;
if ($res and $res->{status} eq 'ok') {
infof "session verified: %s", $res->{session};
$self->_get_channels;
}
else {
debugf "session verify failed: %s", ddf($res || $hdr);
$self->session(undef);
$self->_on_error($res, $hdr);
}
});
}
else {
debugf "create new session...";
$self->post('session/create', {
user => $self->user,
password => $self->password,
$self->api_key ? (api_key => $self->api_key) : (),
}, sub {
my ($res, $hdr) = @_;
return unless $self;
if ($res and $res->{status} eq 'ok') {
debugf "session created: %s", $res->{session};
$self->session( $res->{session} );
$self->_get_channels;
}
else {
debugf "session create failed: %s", ddf($res || $hdr);
$self->_on_error($res, $hdr);
}
});
}
Scalar::Util::weaken($self);
}
sub update_room_info {
my ($self) = @_;
$self->_get_channels;
}
sub _get_channels {
my ($self) = @_;
debugf "getting joined channels";
$self->get('user/get_rooms', { session => $self->session }, sub {
my ($res, $hdr) = @_;
return unless $self;
if ($res and $res->{status} eq 'ok') {
debugf "got rooms: %s", ddf($res->{rooms});
$self->_update_room_info( $res->{rooms} );
}
else {
$self->_on_error($res, $hdr);
}
});
Scalar::Util::weaken($self);
}
sub _update_room_info {
my ($self, $rooms) = @_;
$self->get('room/show', { session => $self->session, room => join ',', @{ $rooms } }, sub {
my ($res, $hdr) = @_;
return unless $self;
if ($res and $res->{status} eq 'ok') {
debugf "got room infos";
if ($self->on_room_info) {
$self->on_room_info->($res->{rooms});
}
else {
debugf "no room info callback";
}
$self->_start_observe($rooms);
}
else {
$self->_on_error($res, $hdr);
}
});
Scalar::Util::weaken($self);
}
lib/AnyEvent/Lingr.pm view on Meta::CPAN
$self->_on_error($res, $hdr);
}
});
Scalar::Util::weaken($self);
}
sub _polling {
my ($self) = @_;
if ($self->_polling_guard) {
debugf 'polling session is still active, ignoring this request';
return;
}
my $uri = URI->new( $self->endpoint . 'event/observe' );
$uri->port(8080);
$uri->query_form({ session => $self->session, counter => $self->counter });
my $guard = http_get $uri, timeout => 60, sub {
my ($body, $hdr) = @_;
return unless $self;
lib/AnyEvent/Lingr.pm view on Meta::CPAN
if ($res and $res->{status} eq 'ok') {
if ($res->{counter}) {
$self->counter( $res->{counter} );
}
if ($res->{events}) {
if (my $cb = $self->on_event) {
$cb->($_) for @{ $res->{events} };
}
else {
debugf "no on_event callback";
}
}
$self->_clear_polling_guard;
$self->_polling;
}
else {
$self->_on_error($res, $hdr);
}
};
( run in 0.568 second using v1.01-cache-2.11-cpan-49f99fa48dc )