X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXCommandmode.pm;h=de59160663c080356a11a354c5a52b098f0f3ea1;hb=5d197c9f7aa2ea796d86aa5473f93956b24cf1b7;hp=e8fd7d5a6fc619c1f0ccf6e15594845261a69b2f;hpb=cce161221036760959ff1d0b7628a55942bf558a;p=spider.git diff --git a/perl/DXCommandmode.pm b/perl/DXCommandmode.pm index e8fd7d5a..de591606 100644 --- a/perl/DXCommandmode.pm +++ b/perl/DXCommandmode.pm @@ -199,20 +199,25 @@ sub run_cmd ($path, $fcmd) = search($main::localcmd, $cmd, "pl"); ($path, $fcmd) = search($main::cmd, $cmd, "pl") if !$path || !$fcmd; - dbg('command', "path: $cmd cmd: $fcmd"); + if ($path && $cmd) { + dbg('command', "path: $cmd cmd: $fcmd"); - my $package = find_cmd_name($path, $fcmd); - @ans = (0) if !$package ; - - if ($package) { - dbg('command', "package: $package"); + my $package = find_cmd_name($path, $fcmd); + @ans = (0) if !$package ; - my $c = qq{ \@ans = $package(\$self, \$args) }; - dbg('eval', "cluster cmd = $c\n"); - eval $c; - if ($@) { - @ans = (0, "Syserr: Eval err cached $package\n$@"); + if ($package) { + dbg('command', "package: $package"); + + my $c = qq{ \@ans = $package(\$self, \$args) }; + dbg('eval', "cluster cmd = $c\n"); + eval $c; + if ($@) { + @ans = (0, "Syserr: Eval err cached $package\n$@"); + } } + } else { + dbg('command', "cmd: $cmd not found"); + @ans = (0); } } } @@ -258,12 +263,21 @@ sub finish { my $self = shift; my $call = $self->call; - + + # log out text + if (-e "$main::data/logout") { + open(I, "$main::data/logout") or confess; + my @in = ; + close(I); + $self->send_now('D', @in); + sleep(1); + } + if ($call eq $main::myalias) { # unset the channel if it is us really my $node = DXNode->get($main::mycall); $node->{dxchan} = 0; } - my $ref = DXNodeuser->get($call); + my $ref = DXCluster->get_exact($call); # issue a pc17 to everybody interested my $nchan = DXChannel->get($main::mycall); @@ -281,9 +295,7 @@ sub finish sub prompt { my $self = shift; - my $call = $self->{call}; - $self->send($self->msg('pr', $call)); - #DXChannel::msg($self, 'pr', $call); + $self->send($self->msg($self->here ? 'pr' : 'pr2', $self->call)); } # broadcast a message to all users [except those mentioned after buffer] @@ -460,7 +472,7 @@ sub find_cmd_name { # return if we can't find it $errstr = undef; - if (undef $mtime) { + unless (defined $mtime) { $errstr = DXM::msg('e1'); return undef; } @@ -471,6 +483,8 @@ sub find_cmd_name { #print STDERR "already compiled $package->handler\n"; ; } else { + delete_package($package) if defined $Cache{$package}{mtime}; + my $fh = new FileHandle; if (!open $fh, $filename) { $errstr = "Syserr: can't open '$filename' $!"; @@ -481,11 +495,7 @@ sub find_cmd_name { close $fh; #wrap the code into a subroutine inside our unique package - my $eval = qq{ - sub $package - { - $sub - } }; + my $eval = qq{ sub $package { $sub } }; if (isdbg('eval')) { my @list = split /\n/, $eval; @@ -507,7 +517,7 @@ sub find_cmd_name { delete_package($package); } else { #cache it unless we're cleaning out each time - $Cache{$package}{mtime} = $mtime; + $Cache{$package}{'mtime'} = $mtime; } }