no warnings qw(once);
# Program starts here
-$SIG{ALRM} = sub { output(); };
my $latest_update = undef;
+my $output_timer = undef;
my $http_timer = undef;
+my $stop_pgn_fetch = 0;
my $tb_retry_timer = undef;
my %tb_cache = ();
my $tb_lookup_running = 0;
};
if ($@) {
warn "Error when getting FICS move history: $@";
- exit;
$getting_movelist = 0;
}
}
fetch_pgn($url);
} elsif ($msg =~ /^stoppgn$/) {
$t->cmd("tell $who Stopping poll.");
+ $stop_pgn_fetch = 1;
$http_timer = undef;
} elsif ($msg =~ /^quit$/) {
$t->cmd("tell $who Bye bye.");
sub handle_pgn {
my ($body, $header, $url) = @_;
+
+ if ($stop_pgn_fetch) {
+ $stop_pgn_fetch = 0;
+ $http_timer = undef;
+ return;
+ }
+
my $pgn = Chess::PGN::Parse->new(undef, $body);
if (!defined($pgn) || !$pgn->read_game()) {
warn "Error in parsing PGN from $url\n";
# Don't update too often.
my $age = Time::HiRes::tv_interval($latest_update);
if ($age < $remoteglotconf::update_max_interval) {
- Time::HiRes::alarm($remoteglotconf::update_max_interval + 0.01 - $age);
+ my $wait = $remoteglotconf::update_max_interval + 0.01 - $age;
+ $output_timer = AnyEvent->timer(after => $wait, cb => \&output);
return;
}