--- deliantra/Deliantra-Client/DC/DB.pm 2007/07/29 04:14:45 1.13 +++ deliantra/Deliantra-Client/DC/DB.pm 2007/07/29 19:32:29 1.14 @@ -18,9 +18,9 @@ use utf8; use Carp (); -use AnyEvent (); use Storable (); use Config; +use Event (); use CFPlus; @@ -127,8 +127,6 @@ } } -our $SYNC_INTERVAL = 60; - our %CB; our $FH; our $ID = "aaa0"; @@ -137,12 +135,17 @@ our $write_buf; our $read_buf; +our $SYNC = Event->idle (min => 5, max => 60, parked => 1, cb => sub { + CFPlus::DB::Server::req (sync => sub { }); + $_[0]->w->stop; +}); + sub fh_write { my $len = syswrite $FH, $write_buf; substr $write_buf, 0, $len, ""; - undef $fh_w_watcher + $fh_w_watcher->stop unless length $write_buf; } @@ -188,12 +191,8 @@ $write_buf .= pack "N/a*", Storable::freeze [$id, $type, @args]; $CB{$id} = $cb; - $fh_w_watcher = AnyEvent->io (fh => $FH, poll => 'w', cb => \&fh_write); -} - -sub sync_tick { - req "sync", sub { }; - $sync_timer = AnyEvent->timer (after => $SYNC_INTERVAL, cb => \&sync_tick); + $fh_w_watcher->start; + $SYNC->start; } sub do_sync { @@ -350,9 +349,9 @@ $CB{die} = sub { die shift }; - $fh_r_watcher = AnyEvent->io (fh => $FH, poll => 'r', nice => 1, cb => \&fh_read); - - sync_tick; + $fh_r_watcher = Event->io (fd => $FH, poll => 'r', nice => 1, cb => \&fh_read); + $fh_w_watcher = Event->io (fd => $FH, poll => 'w', nice => -1, parked => 1, cb => \&fh_write); + $SYNC->start; } sub stop {