--- deliantra/server/lib/cf.pm 2006/08/24 13:35:48 1.35 +++ deliantra/server/lib/cf.pm 2006/08/24 14:04:29 1.36 @@ -233,64 +233,75 @@ } } -register_command "perl-reload", 0, sub { - my ($who, $arg) = @_; +sub _perl_reload(&) { + my ($msg) = @_; - if ($who->flag (FLAG_WIZ)) { - $who->message ("reloading..."); + $msg->("reloading..."); - warn "reloading...\n"; - eval { - # 1. cancel all watchers - $_->cancel for Event::all_watchers; - - # 2. unload all extensions - for (@exts) { - $who->message ("unloading <$_>"); - unload_extension $_; - } + eval { + # 1. cancel all watchers + $_->cancel for Event::all_watchers; - # 3. unload all modules loaded from $LIBDIR - while (my ($k, $v) = each %INC) { - next unless $v =~ /^\Q$LIBDIR\E\/.*\.pm$/; + # 2. unload all extensions + for (@exts) { + $msg->("unloading <$_>"); + unload_extension $_; + } - $who->message ("removing <$k>"); - delete $INC{$k}; + # 3. unload all modules loaded from $LIBDIR + while (my ($k, $v) = each %INC) { + next unless $v =~ /^\Q$LIBDIR\E\/.*\.pm$/; - $k =~ s/\.pm$//; - $k =~ s/\//::/g; + $msg->("removing <$k>"); + delete $INC{$k}; - if (my $cb = $k->can ("unload_module")) { - $cb->(); - } + $k =~ s/\.pm$//; + $k =~ s/\//::/g; - Symbol::delete_package $k; + if (my $cb = $k->can ("unload_module")) { + $cb->(); } - # 4. get rid of ext::, as good as possible - Symbol::delete_package "ext::$_" - for qw(cf::object cf::object::map cf::object::player cf::player cf::map cf::party cf::region); - - # 5. remove register_script_function callbacks - # TODO - - # 6. unload cf.pm "a bit" - delete $INC{"cf.pm"}; - - # don't, removes xs symbols, too - #Symbol::delete_package __PACKAGE__; - - # 7. reload cf.pm - $who->message ("reloading cf.pm"); - require cf; + Symbol::delete_package $k; + } + + # 4. get rid of ext::, as good as possible + Symbol::delete_package "ext::$_" + for qw(cf::object cf::object::map cf::object::player cf::player cf::map cf::party cf::region); + + # 5. remove register_script_function callbacks + # TODO + + # 6. unload cf.pm "a bit" + delete $INC{"cf.pm"}; + + # don't, removes xs symbols, too + #Symbol::delete_package __PACKAGE__; + + # 7. reload cf.pm + $msg->("reloading cf.pm"); + require cf; + }; + $msg->($@) if $@; + + $msg->("reloaded"); +}; + +sub perl_reload() { + _perl_reload { + warn $_[0]; + print "$_[0]\n"; + }; +} + +register_command "perl-reload", 0, sub { + my ($who, $arg) = @_; + + if ($who->flag (FLAG_WIZ)) { + _perl_reload { + warn $_[0]; + $who->message ($_[0]); }; - warn $@ if $@; - $who->message ($@) if $@; - warn "reloaded\n"; - - $who->message ("reloaded"); - } else { - $who->message ("Intruder Alert!"); } };