1. Made the telnet thing work a bit better. It still will not work reliably to
[spider.git] / perl / DXProt.pm
index ec49fedd3e61069b5921ab3b4e26c37603182b91..7bccfcb9acb3dfebd1f12760c4168aa51cc79b5f 100644 (file)
@@ -38,6 +38,7 @@ sub init
 {
        my $user = DXUser->get($main::mycall);
        $me = DXProt->new($main::mycall, undef, $user); 
+       $me->{here} = 1;
        #  $me->{sort} = 'M';    # M for me
 }
 
@@ -79,6 +80,7 @@ sub start
        }
        $self->state('init');
        $self->pc50_t(time);
+
        Log('DXProt', "$call connected");
 }
 
@@ -203,6 +205,7 @@ sub normal
                        last SWITCH if !$node; # ignore if havn't seen a PC19 for this one yet
                        my $i;
                        
+                       
                        for ($i = 2; $i < $#field; $i++) {
                                my ($call, $confmode, $here) = $field[$i] =~ /^(\S+) (-) (\d)/o;
                                next if length $call < 3;
@@ -217,8 +220,9 @@ sub normal
                                $call =~ s/-\d+$//o;        # remove ssid for users
                                my $user = DXUser->get_current($call);
                                $user = DXUser->new($call) if !$user;
-                               $user->node($node->call);
                                $user->homenode($node->call) if !$user->homenode;
+                               $user->node($node->call);
+                               $user->lastin($main::systime);
                                $user->put;
                        }
                        
@@ -266,10 +270,11 @@ sub normal
                                if (!$user) {
                                        $user = DXUser->new($call);
                                        $user->sort('A');
-                                       $user->node($call);
                                        $user->homenode($call);
-                                       $user->put;
+                                       $user->node($call);
                                }
+                               $user->lastin($main::systime);
+                               $user->put;
                        }
                        
                        # queue up any messages
@@ -320,7 +325,7 @@ sub normal
                        last SWITCH;
                }
                
-               if (($pcno >= 28 && $pcno <= 33) || $pcno == 40 || $pcno == 42) { # mail/file handling
+               if (($pcno >= 28 && $pcno <= 33) || $pcno == 40 || $pcno == 42 || $pcno == 49) { # mail/file handling
                        DXMsg::process($self, $line);
                        return;
                }
@@ -387,13 +392,9 @@ sub normal
                        } elsif ($field[2] == 2) {
                                $user->qth($field[3]);
                        } elsif ($field[2] == 3) {
-                               my ($latd, $latm, $latl, $longd, $longm, $longl) = split /\s+/, $field[3];
-                               $longd += ($longm/60);
-                               $longd = 0-$longd if (uc $longl) eq 'W'; 
-                               $user->long($longd);
-                               $latd += ($latm/60);
-                               $latd = 0-$latd if (uc $latl) eq 'S';
-                               $user->lat($latd);
+                               my ($lat, $long) = DXBearing::stoll($field[3]);
+                               $user->lat($lat);
+                               $user->long($long);
                        } elsif ($field[2] == 4) {
                                $user->homenode($field[3]);
                        }
@@ -418,9 +419,6 @@ sub normal
                if ($pcno == 48) {
                        last SWITCH;
                }
-               if ($pcno == 49) {
-                       last SWITCH;
-               }
                
                if ($pcno == 50) {              # keep alive/user list
                        my $ref = DXCluster->get_exact($field[1]);
@@ -531,6 +529,7 @@ sub finish
        
        # now broadcast to all other ak1a nodes that I have gone
        broadcast_ak1a(pc21($call, 'Gone.'), $self);
+       
        Log('DXProt', $call . " Disconnected");
        $ref->del() if $ref;
 }
@@ -606,6 +605,7 @@ sub broadcast_users
        
        foreach $chan (@chan) {
                next if grep $chan == $_, @except;
+               $s =~ s/\a//og if !$chan->{beep};
                $chan->send($s);                # send it if it isn't the except list
        }
 }