diff options
Diffstat (limited to 'lib/MasterServer/Core/Schedulers.pm')
| -rwxr-xr-x | lib/MasterServer/Core/Schedulers.pm | 65 |
1 files changed, 23 insertions, 42 deletions
diff --git a/lib/MasterServer/Core/Schedulers.pm b/lib/MasterServer/Core/Schedulers.pm index cee4e5c..230a423 100755 --- a/lib/MasterServer/Core/Schedulers.pm +++ b/lib/MasterServer/Core/Schedulers.pm @@ -6,11 +6,8 @@ use AnyEvent; use POSIX qw/strftime/; use Exporter 'import'; use DBI; - -our @EXPORT = qw | - long_periodic_tasks - short_periodic_tasks -|; +our @EXPORT = qw | long_periodic_tasks + short_periodic_tasks |; ################################################################################ ## tasks that are executed only once or twice per hour @@ -20,20 +17,18 @@ sub long_periodic_tasks { my $prev = 0; return AnyEvent->timer ( - after => 30, # 30 seconds grace time - interval => 3600, # execute every hour + after => 90, # grace time receiving beacons + interval => 3600, cb => sub { # update Killing Floor stats - $self->read_kfstats() if $self->{kfstats_enabled}; + $self->read_kfstats if $self->{kfstats_enabled}; # delete old masterserver applets that have been unresponsive for a while now - $self->remove_unresponsive_applets() if (defined $self->{firstrun}); + $self->remove_unresponsive_applets if (defined $self->{firstrun}); - # time spacer - my $t = 0; - # clean out handles from the previous round (executed or not) + my $t = 0; $self->{scope}->{sync} = (); # Synchronize with all other 333networks masterservers that are uplinking, @@ -42,7 +37,7 @@ sub long_periodic_tasks { # get serverlist my $masterserverlist = $self->get_server( - updated => 3600, + updated => 7200, gamename => "333networks", ); @@ -50,7 +45,7 @@ sub long_periodic_tasks { # add 5 second delay to spread network/server load $self->{scope}->{sync}->{$t} = AnyEvent->timer( after => 5*$t++, - cb => sub{$self->sync_with_master($ms)} + cb => sub{$self->synchronize($ms, "333nwm")} ) if ($ms->{hostport} > 0); } } @@ -63,22 +58,20 @@ sub long_periodic_tasks { if ($self->{master_applet_enabled}) { # get applet list - my $appletlist = $self->get_masterserver_applets(); + my $appletlist = $self->get_masterserver_applets; for my $ms (@{$appletlist}) { # add 5 second delay to spread network/server load $self->{scope}->{sync}->{$t} = AnyEvent->timer( after => 5*$t++, - cb => sub{$self->query_applet($ms)} + cb => sub{$self->synchronize($ms, "applet")} ); } } - # - # very long-running tasks, like database dumps + # very long-running tasks, like database dumps. # interval from config - # my $curr = 0; $curr = strftime('%d',localtime) if ($self->{dump_db} =~ /^daily$/i ); $curr = strftime('%U',localtime) if ($self->{dump_db} =~ /^weekly$/i ); @@ -87,19 +80,11 @@ sub long_periodic_tasks { # on change, execute if ($prev < $curr) { + # skip on first run and update timer + if ($prev == 0) { $prev = $curr; return; } - # skip on first run - if ($prev == 0) { - # update timer and loop - $prev = $curr; - return; - } - - # dump db - $self->dump_database(); - - # update timekeeper - $prev = $curr; + # dump db and update timer + $self->dump_database; $prev = $curr; } }, ); @@ -110,25 +95,21 @@ sub long_periodic_tasks { ################################################################################ sub short_periodic_tasks { my $self = shift; - return AnyEvent->timer ( - after => 10, + after => 5, interval => 120, cb => sub { - # update stats on direct beacons and total number of servers - $self->update_stats(); + $self->update_stats; # determine whether servers are still uplinking to us. If not, toggle. - $self->write_direct_beacons() if (defined $self->{firstrun}); + $self->write_direct_beacons if (defined $self->{firstrun}); - # delete old servers from the "pending" list (except for the first run) - $self->delete_old_pending() if (defined $self->{firstrun}); - - # uplink to other 333networks masterservers with heartbeats, so other - # masterservers can find us too - $self->send_heartbeats(); + # delete old servers from the "pending" list + $self->delete_old_pending; + # uplink to other 333networks masterservers so others can find us too + $self->send_heartbeats; }, ); } |
