--- deliantra/Deliantra-Client/DC/DB.pm 2007/07/12 17:56:51 1.9 +++ deliantra/Deliantra-Client/DC/DB.pm 2007/07/29 04:14:45 1.13 @@ -26,8 +26,9 @@ our $DB_HOME = "$Crossfire::VARDIR/cfplus-$BerkeleyDB::db_version-$Config{archname}"; -sub path_of($) { - "$DB_HOME/data-$_[0]" +sub path_of_res($) { + utf8::downgrade $_[0]; # bug in unpack "H*" + "$DB_HOME/res-data-" . unpack "H*", $_[0] } sub sync { @@ -56,6 +57,10 @@ CFPlus::DB::Server::req (write_file => @_); } +sub prefetch_file($$$) { + CFPlus::DB::Server::req (prefetch_file => @_); +} + our $tilemap; sub get_tile_id_sync($) { @@ -273,7 +278,7 @@ utf8::downgrade $file; utf8::downgrade $data; - open my $fh, ">:raw", CFPlus::DB::path_of $file + open my $fh, ">:raw", $file or return; print $fh $data; close $fh; @@ -281,6 +286,17 @@ 1 } +sub do_prefetch_file { + my ($file, $size) = @_; + + utf8::downgrade $file; + open my $fh, "<:raw", $file + or return; + sysread $fh, my $buf, $size; + + 1 +} + sub run { ($FH, my $fh) = CFPlus::socketpipe; @@ -334,7 +350,7 @@ $CB{die} = sub { die shift }; - $fh_r_watcher = AnyEvent->io (fh => $FH, poll => 'r', cb => \&fh_read); + $fh_r_watcher = AnyEvent->io (fh => $FH, poll => 'r', nice => 1, cb => \&fh_read); sync_tick; }