--- deliantra/server/lib/cf.pm 2006/08/24 13:13:49 1.34 +++ deliantra/server/lib/cf.pm 2006/08/24 13:35:48 1.35 @@ -19,6 +19,10 @@ our %PROP_IDX; our $LIBDIR = maps_directory "perl"; +our $TICK = MAX_TIME * 1e-6; +our $TICK_WATCHER; +our $NEXT_TICK; + BEGIN { @EVENT = map lc, @EVENT; @@ -520,21 +524,6 @@ # the server's main() sub run { - my $tick = MAX_TIME * 1e-6; - my $next = Event::time; - my $timer = Event->timer (at => $next, cb => sub { - cf::server_tick; # one server iteration - - $next += $tick; - my $NOW = Event::time; - - # if we are delayd by > 0.25 second, skip ticks - $next = $NOW if $NOW >= $next + .25; - - $_[0]->w->at ($next); - $_[0]->w->start; - }); - Event::loop; } @@ -547,5 +536,22 @@ load_extensions; +$TICK_WATCHER = Event->timer ( + prio => 1, + at => $NEXT_TICK || 1, + cb => sub { + cf::server_tick; # one server iteration + + my $NOW = Event::time; + $NEXT_TICK += $TICK; + + # if we are delayed by > 0.25 second, skip ticks + $NEXT_TICK = $NOW if $NOW >= $NEXT_TICK + .25; + + $TICK_WATCHER->at ($NEXT_TICK); + $TICK_WATCHER->start; + }, +); + 1