aboutsummaryrefslogtreecommitdiff
path: root/lib/MasterServer/Core/Schedulers.pm
diff options
context:
space:
mode:
authorDarkelarious <darkelarious@333networks.com>2017-08-22 11:00:13 +0200
committerDarkelarious <darkelarious@333networks.com>2017-08-22 11:00:13 +0200
commitc06322da38b4cb76b2036af1a5448083adb8ff20 (patch)
tree189c9f0fec3325be927f763aba23cf18aa68cfe4 /lib/MasterServer/Core/Schedulers.pm
parente0d727670cbeda0db0812c5c9efc503d75f8d0a4 (diff)
downloadMasterServer-Perl-2.4.0.tar.gz
MasterServer-Perl-2.4.0.zip
new server checking mechanism, complete recode of major functionsv2.4.0
Diffstat (limited to 'lib/MasterServer/Core/Schedulers.pm')
-rwxr-xr-xlib/MasterServer/Core/Schedulers.pm65
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;
},
);
}