fix rbn basecall a bit more
[spider.git] / perl / RBN.pm
index 7ad9093b7817831732debf8a84fc0ecca42237bd..3a906dbe7e0b5b5d816f83d59b85b93097245211 100644 (file)
@@ -75,10 +75,11 @@ our $startup_delay = 5*60;          # don't send anything out until this timer has expir
                                 # this is to allow the feed to "warm up" with duplicates
                                 # so that the "big rush" doesn't happen.
 
-our $minspottime = 30*60;              # the time between respots of a callsign - if a call is
+our $respottime = 30*60;               # the time between respots of a callsign - if a call is
                                 # still being spotted (on the same freq) and it has been
                                 # spotted before, it's spotted again after this time
-                                # until the next minspottime has passed.
+                                # until the next respottime has passed.
+
 
 our $beacontime = 5*60;                        # same as minspottime, but for beacons (and shorter)
 
@@ -90,9 +91,13 @@ our $limbotime = 5*60;                       # if there are fewer than $minqual candidates and $dwe
                                 # simply be that it is not in standard spot coverage. (ask G4PIQ
                                 # about this).
 
+our $cachetime = 60*60;                        # The length of time spot data is cached
+
 our $filterdef = $Spot::filterdef; # we use the same filter as the Spot system. Can't think why :-).
 
 my $spots;                                             # the GLOBAL spot cache
+my $qrg;                                               # the GlOBAL (ephemeral) qrg cache (generated on re-read of cache)
+
 
 my %runtime;                                   # how long each channel has been running
 
@@ -149,7 +154,7 @@ sub new
        $self->{norawhour} = 0;
        $self->{sort} = 'N';
        $self->{lasttime} = $main::systime;
-       $self->{minspottime} = $minspottime;
+       $self->{respottime} = $respottime;
        $self->{beacontime} = $beacontime;
        $self->{showstats} = 0;
        $self->{pingint} = 0;
@@ -342,20 +347,22 @@ sub normal
                #
                # But before we do anything, if this call is in the seeme hash then just send the spot to them
                #
-               if (exists $seeme{$call} && (my $scall = $seeme{$call})) {
+               if (exists $seeme{$call} && (my $scall = $seeme{basecall($call)})) {
                        my $uchan = DXChannel::get($call);
-                       if ($uchan->is_user) {
-                               if (isdbg('seeme')) {
-                                       dbg("seeme: $line");
-                                       dbg( qq{seemme:decode or:$origin qr:$qrg ca:$call mo:$mode s:$s m:$m sp:$spd u:$u sort:$sort t:$t tx:$tx qra:$qra});
+                       if ($uchan) {
+                               if ($uchan->is_user) {
+                                       if (isdbg('seeme')) {
+                                               dbg("seeme: $line");
+                                               dbg( qq{seemme:decode or:$origin qr:$qrg ca:$call mo:$mode s:$s m:$m sp:$spd u:$u sort:$sort t:$t tx:$tx qra:$qra});
+                                       }
+                                       my @s =  Spot::prepare($qrg, $call, $utz, sprintf("%-3s %2ddB **SEEME**", $mode, $s), $origin.'-#');
+                                       my $buf = $uchan->format_dx_spot(@s);
+                                       dbg("seeme: result '$buf'") if isdbg('seeme');
+                                       $uchan->local_send('S', $buf) if $scall;
+                               } else {
+                                       LogDbg("RBN Someone is playing silly persons $call is not a user and cannot do 'seeme', ignored and reset");
+                                       delete $seeme{$call};
                                }
-                               my @s =  Spot::prepare($qrg, $call, $utz, sprintf("%-3s %2ddB **SEEME**", $mode, $s), $origin.'-#');
-                               my $buf = $uchan->format_dx_spot(@s);
-                               dbg("seeme: result '$buf'") if isdbg('seeme');
-                               $uchan->local_send('S', $buf) if $scall;
-                       } else {
-                               LogDbg("RBN Someone is playing silly persons $call is not a user and cannot do 'seeme', ignored and reset");
-                               delete $seeme{$call};
                        }
                }
                # find it?
@@ -389,7 +396,7 @@ sub normal
                my $respot = 0;
                if ($cand && ref $cand) {
                        if (@$cand <= CData) {
-                               if ($self->{minspottime} > 0 && $now - $cand->[CTime] < $self->{minspottime}) {
+                               if ($self->{respottime} > 0 && $now - $cand->[CTime] < $self->{respottime}) {
                                        dbg("RBN: key: '$sp' call: $call qrg: $qrg DUPE \@ ". atime(int $cand->[CTime])) if $dbgrbn && isdbg('rbn');
                                        return;
                                }
@@ -854,7 +861,7 @@ sub per_10_minute
                next if $k =~ /^O\|/;
                next if $k =~ /^SKIM\|/;
                
-               if ($main::systime - $cand->[CTime] > $minspottime*2) {
+               if ($main::systime - $cand->[CTime] > $cachetime) {
                        delete $spots->{$k};
                        ++$removed;
                }
@@ -959,12 +966,12 @@ sub check_cache
 sub add_seeme
 {
        my $call = shift;
-       $seeme{$call} = 1;
+       $seeme{basecall($call)} = 1;
 }
 
 sub del_seeme
 {
        my $call = shift;
-       delete $seeme{$call};
+       delete $seeme{basecall($call)};
 }
 1;