X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=e65cad70a799ddc53af94e0fb45279ca2745d201;hb=b0dc102f62871b43134807fa254749b1720d326a;hp=67f64b79064616092577d3cbabab6629a26cc7ca;hpb=f534cd884051603e9f0368b912afa355e7a2310f;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 67f64b79..e65cad70 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -126,17 +126,28 @@ sub start $self->send_now('B',"0"); $self->send_now('E',"0"); + # ping neighbour node stuff + my $ping = $user->pingint; + $ping = 5*60 unless defined $ping; + $self->pingint($ping); + $self->nopings($user->nopings || 2); + $self->pingtime([ ]); + # send initialisation string - if (!$self->{outbound}) { + unless ($self->{outbound}) { $self->send(pc38()) if DXNode->get_all(); $self->send(pc18()); + $self->lastping($main::systime); + } else { + # remove from outstanding connects queue + @main::outstanding_connects = grep {$_->{call} ne $call} @main::outstanding_connects; + $self->lastping($main::systime + $self->pingint / 2); } $self->state('init'); $self->pc50_t(time); - $self->pingint($user->pingint || 3*60); - $self->nopings(3); - $self->lastping($main::systime); - $self->pingtime([ ]); + + # send info to all logged in thingies + $self->tell_login('loginn'); Log('DXProt', "$call connected"); } @@ -179,7 +190,7 @@ sub normal # is it for me or one of mine? my $call = ($field[5] gt ' ') ? $field[5] : $field[2]; - if ($call eq $main::mycall || grep $_ eq $call, get_all_user_calls()) { + if ($call eq $main::mycall || grep $_ eq $call, DXChannel::get_all_user_calls()) { # yes, it is my $text = unpad($field[3]); @@ -716,7 +727,7 @@ sub normal if ($tochan) { $tochan->nopings(3); # pump up the timer push @{$tochan->pingtime}, $t; - shift @{$tochan->pingtime} if @{$tochan->pingtime} > 10; + shift @{$tochan->pingtime} if @{$tochan->pingtime} > 6; my $st; for (@{$tochan->pingtime}) { $st += $_; @@ -769,7 +780,7 @@ sub process } # send a ping out on this channel - if ($t >= $dxchan->pingint + $dxchan->lastping) { + if ($dxchan->pingint && $t >= $dxchan->pingint + $dxchan->lastping) { if ($dxchan->nopings <= 0) { $dxchan->disconnect; } else { @@ -807,10 +818,11 @@ sub finish { my $self = shift; my $call = $self->call; + my $nopc39 = shift; my $ref = DXCluster->get_exact($call); - $self->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', "System Op"))); - + $self->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', "System Op"))) unless $nopc39; + # unbusy and stop and outgoing mail my $mref = DXMsg::get_busy($call); $mref->stop_msg($call) if $mref; @@ -830,7 +842,10 @@ sub finish # now broadcast to all other ak1a nodes that I have gone broadcast_ak1a(pc21($call, 'Gone.'), $self) unless $self->{isolate}; - + + # send info to all logged in thingies + $self->tell_login('logoutn'); + Log('DXProt', $call . " Disconnected"); $ref->del() if $ref; } @@ -1062,7 +1077,7 @@ sub broadcast_ak1a { my $s = shift; # the line to be rebroadcast my @except = @_; # to all channels EXCEPT these (dxchannel refs) - my @dxchan = get_all_ak1a(); + my @dxchan = DXChannel::get_all_ak1a(); my $dxchan; # send it if it isn't the except list and isn't isolated and still has a hop count @@ -1079,7 +1094,7 @@ sub broadcast_all_ak1a { my $s = shift; # the line to be rebroadcast my @except = @_; # to all channels EXCEPT these (dxchannel refs) - my @dxchan = get_all_ak1a(); + my @dxchan = DXChannel::get_all_ak1a(); my $dxchan; # send it if it isn't the except list and isn't isolated and still has a hop count @@ -1098,7 +1113,7 @@ sub broadcast_users my $sort = shift; # the type of transmission my $fref = shift; # a reference to an object to filter on my @except = @_; # to all channels EXCEPT these (dxchannel refs) - my @dxchan = get_all_users(); + my @dxchan = DXChannel::get_all_users(); my $dxchan; my @out; @@ -1139,43 +1154,6 @@ sub broadcast_list } } -# -# gimme all the ak1a nodes -# -sub get_all_ak1a -{ - my @list = DXChannel->get_all(); - my $ref; - my @out; - foreach $ref (@list) { - push @out, $ref if $ref->is_ak1a; - } - return @out; -} - -# return a list of all users -sub get_all_users -{ - my @list = DXChannel->get_all(); - my $ref; - my @out; - foreach $ref (@list) { - push @out, $ref if $ref->is_user; - } - return @out; -} - -# return a list of all user callsigns -sub get_all_user_calls -{ - my @list = DXChannel->get_all(); - my $ref; - my @out; - foreach $ref (@list) { - push @out, $ref->call if $ref->is_user; - } - return @out; -} # # obtain the hops from the list for this callsign and pc no