ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/lib/cf.pm
(Generate patch)

Comparing deliantra/server/lib/cf.pm (file contents):
Revision 1.59 by root, Wed Aug 30 16:30:37 2006 UTC vs.
Revision 1.61 by root, Sun Sep 3 22:45:56 2006 UTC

478} 478}
479 479
480sub object_freezer_save { 480sub object_freezer_save {
481 my ($filename, $rdata, $objs) = @_; 481 my ($filename, $rdata, $objs) = @_;
482 482
483 if (length $$rdata) {
484 warn sprintf "saving %s (%d,%d)\n",
485 $filename, length $$rdata, scalar @$objs;
486
483 if (open my $fh, ">:raw", "$filename~") { 487 if (open my $fh, ">:raw", "$filename~") {
484 chmod SAVE_MODE, $fh;
485 syswrite $fh, $$rdata;
486 close $fh;
487
488 if (@$objs && open my $fh, ">:raw", "$filename.pst~") {
489 chmod SAVE_MODE, $fh; 488 chmod SAVE_MODE, $fh;
490 syswrite $fh, Storable::nfreeze { version => 1, objs => $objs }; 489 syswrite $fh, $$rdata;
491 close $fh; 490 close $fh;
491
492 if (@$objs && open my $fh, ">:raw", "$filename.pst~") {
493 chmod SAVE_MODE, $fh;
494 syswrite $fh, Storable::nfreeze { version => 1, objs => $objs };
495 close $fh;
492 rename "$filename.pst~", "$filename.pst"; 496 rename "$filename.pst~", "$filename.pst";
497 } else {
498 unlink "$filename.pst";
499 }
500
501 rename "$filename~", $filename;
493 } else { 502 } else {
494 unlink "$filename.pst"; 503 warn "FATAL: $filename~: $!\n";
495 } 504 }
496
497 rename "$filename~", $filename;
498 } else { 505 } else {
499 warn "FATAL: $filename~: $!\n"; 506 unlink $filename;
507 unlink "$filename.pst";
500 } 508 }
501} 509}
502 510
503sub object_thawer_load { 511sub object_thawer_load {
504 my ($filename) = @_; 512 my ($filename) = @_;
505 513
514 local $/;
515
516 my $av;
517
518 #TODO: use sysread etc.
519 if (open my $data, "<:raw:perlio", $filename) {
520 $data = <$data>;
506 open my $fh, "<:raw:perlio", "$filename.pst" 521 if (open my $pst, "<:raw:perlio", "$filename.pst") {
507 or return; 522 $av = eval { (Storable::thaw <$pst>)->{objs} };
523 }
524 return ($data, $av);
525 }
508 526
509 eval { local $/; (Storable::thaw <$fh>)->{objs} } 527 ()
510} 528}
511 529
512attach_to_objects 530attach_to_objects
513 prio => -1000000, 531 prio => -1000000,
514 on_clone => sub { 532 on_clone => sub {
710 #Symbol::delete_package __PACKAGE__; 728 #Symbol::delete_package __PACKAGE__;
711 729
712 # 7. reload cf.pm 730 # 7. reload cf.pm
713 $msg->("reloading cf.pm"); 731 $msg->("reloading cf.pm");
714 require cf; 732 require cf;
733
734 $msg->("load extensions");
735 cf::load_extensions;
715 }; 736 };
716 $msg->($@) if $@; 737 $msg->($@) if $@;
717 738
718 $msg->("reloaded"); 739 $msg->("reloaded");
719}; 740};
779 800
780sub all_objects(@) { 801sub all_objects(@) {
781 @_, map all_objects ($_->inv), @_ 802 @_, map all_objects ($_->inv), @_
782} 803}
783 804
805# TODO: compatibility cruft, remove when no longer needed
784attach_to_players 806attach_to_players
785 on_load => sub { 807 on_load => sub {
786 my ($pl, $path) = @_; 808 my ($pl, $path) = @_;
787 809
788 for my $o (all_objects $pl->ob) { 810 for my $o (all_objects $pl->ob) {
909 931
910############################################################################# 932#############################################################################
911# the server's main() 933# the server's main()
912 934
913sub main { 935sub main {
936 load_extensions;
914 Event::loop; 937 Event::loop;
915} 938}
916 939
917############################################################################# 940#############################################################################
918# initialisation 941# initialisation
919 942
920register "<global>", __PACKAGE__; 943register "<global>", __PACKAGE__;
921 944
922unshift @INC, $LIBDIR; 945unshift @INC, $LIBDIR;
923
924load_extensions;
925 946
926$TICK_WATCHER = Event->timer ( 947$TICK_WATCHER = Event->timer (
927 prio => 1, 948 prio => 1,
928 at => $NEXT_TICK || 1, 949 at => $NEXT_TICK || 1,
929 cb => sub { 950 cb => sub {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines