get all the debugging finally into the debug files when things go wrong
[spider.git] / perl / DXCommandmode.pm
index 92eaa46cbb3bcba82edb0db6b355de730852f9af..4a1acbba2858c37745d31fee704e245893fc0d39 100644 (file)
@@ -24,7 +24,6 @@ use DXLogPrint;
 use DXBearing;
 use CmdAlias;
 use Filter;
-use Carp;
 use Minimuf;
 use DXDb;
 use Sun;
@@ -77,13 +76,14 @@ sub start
        $self->{talk} = $user->wanttalk;
        $self->{wx} = $user->wantwx;
        $self->{dx} = $user->wantdx;
+       $self->{logininfo} = $user->wantlogininfo;
        $self->{here} = 1;
        
        # add yourself to the database
        my $node = DXNode->get($main::mycall) or die "$main::mycall not allocated in DXNode database";
        my $cuser = DXNodeuser->new($self, $node, $call, 0, 1);
        $node->dxchan($self) if $call eq $main::myalias; # send all output for mycall to myalias
-       
+
        # issue a pc16 to everybody interested
        my $nchan = DXChannel->get($main::mycall);
        my @pc16 = DXProt::pc16($nchan, $cuser);
@@ -91,7 +91,7 @@ sub start
                DXProt::broadcast_all_ak1a($_);
        }
        Log('DXCommand', "$call connected");
-       
+
        # send prompts and things
        my $info = DXCluster::cluster();
        $self->send("Cluster:$info");
@@ -100,9 +100,10 @@ sub start
        $self->send($self->msg('qll')) if !$user->qra || (!$user->lat && !$user->long);
        $self->send($self->msg('hnodee1')) if !$user->qth;
        $self->send($self->msg('m9')) if DXMsg::for_me($call);
-
-       
        $self->send($self->msg('pr', $call));
+       
+       $self->tell_login('loginu');
+       
 }
 
 #
@@ -244,7 +245,7 @@ sub run_cmd
                                        unless (exists $Cache{$package}->{'sub'}) {
                                                $c = eval $Cache{$package}->{'eval'};
                                                if ($@) {
-                                                       return ("Syserr: Syntax error in $package", $@);
+                                                       return DXDebug::shortmess($@);
                                                }
                                                $Cache{$package}->{'sub'} = $c;
                                        }
@@ -253,7 +254,10 @@ sub run_cmd
                                                @ans = &{$c}($self, $args);
                                    };
                                        
-                                       return ($@) if $@;
+                                       if ($@) {
+                                               cluck($@);
+                                               return (DXDebug::shortmess($@));
+                                       };
                                }
                        } else {
                                dbg('command', "cmd: $cmd not found");
@@ -295,6 +299,9 @@ sub finish
        my $self = shift;
        my $call = $self->call;
 
+       # I was the last node visited
+    $self->user->node($main::mycall);
+               
        # log out text
        if (-e "$main::data/logout") {
                open(I, "$main::data/logout") or confess;
@@ -308,14 +315,17 @@ sub finish
                my $node = DXNode->get($main::mycall);
                $node->{dxchan} = 0;
        }
-       my $ref = DXCluster->get_exact($call);
        
        # issue a pc17 to everybody interested
        my $nchan = DXChannel->get($main::mycall);
        my $pc17 = $nchan->pc17($self);
        DXProt::broadcast_all_ak1a($pc17);
-       
+
+       # send info to all logged in thingies
+       $self->tell_login('logoutu');
+
        Log('DXCommand', "$call disconnected");
+       my $ref = DXCluster->get_exact($call);
        $ref->del() if $ref;
 }
 
@@ -525,7 +535,7 @@ sub find_cmd_name {
                        }
                }
                
-               $Cache{$package} = {mtime => $mtime, eval => $eval };
+               $Cache{$package} = {mtime => $mtime, 'eval' => $eval };
        }
 
        return $package;