AnyEvent-SlackBot
view release on metacpan or search on metacpan
lib/AnyEvent/SlackBot.pm view on Meta::CPAN
sub connect_and_run {
my ($self)=@_;
my $request=POST $self->rtm_start_url,[token=>$self->token];
my $ua=LWP::UserAgent->new;
$ua->ssl_opts(
SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE,
SSL_hostname => '',
verify_hostname => 0
);
my $response=$ua->request($request);
$self->{timer}=undef;
if($response->code==200) {
my $data=eval { from_json($response->decoded_content) };
if($@) {
return $self->new_false("Failed to decode response, error was: $@");
}
unless(exists $data->{url} and $data->{self}) {
my $msg=exists $data->{error} ? $data->{error} : 'unknown slack error';
return $self->new_false("Failed to get valid connection info, error was: $msg");
}
lib/AnyEvent/SlackBot.pm view on Meta::CPAN
my $connection=eval { shift->recv };
$self->connection($connection);
if($@) {
$self->log_error("Failed to cnnect to our web socket, error was: $@");
return $self->handle_reconnect;
}
$self->stats->{last_connected_on}=time;
$self->stats->{total_connections}++;
$self->stats->{last_msg_on}=time;
$self->{timer}=AnyEvent->timer(
interval=>$self->keep_alive_timeout,
after=>$self->keep_alive_timeout,
cb=>sub {
my $max_timeout=$self->stats->{last_msg_on} + 3 * $self->keep_alive_timeout;
if(time < $max_timeout) {
if(time > $self->stats->{last_msg_on} + $self->keep_alive_timeout) {
$self->log_info("sending keep alive to server");
$connection->send(to_json({
id=>$self->next_id,
type=>'ping',
lib/AnyEvent/SlackBot.pm view on Meta::CPAN
$self->{connection}=undef;
if($self->auto_reconnect) {
my $result=$self->connect_and_run;
if($result) {
$self->log_info("auto reconnected without an error, flushing backlog of outbound messages");
while(my $msg=shift @{$self->{backlog}}) {
$self->send($msg);
}
} else {
$self->log_error("Failed to reconnect will try again in 15 seconds, error was: $result");
$self->{timer}=AnyEvent->timer(
interval=>$self->keep_alive_timeout,
after=>$self->keep_alive_timeout,
cb=>sub { $self->handle_reconnect },
);
}
}
}
=back
( run in 1.353 second using v1.01-cache-2.11-cpan-49f99fa48dc )