X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=ff746b5e116667eb1bcd3954eaae913da5182155;hb=f3b23f65ec3e143910ec6a6c36cfe1ab37f0338c;hp=c14c9bbefdc64879402412bac78f826e2a6ff374;hpb=6ea05be3ca5b4857bb319782c408d5784658ec20;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index c14c9bbe..ff746b5e 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -126,18 +126,23 @@ sub start $self->send_now('B',"0"); $self->send_now('E',"0"); + # ping neighbour node stuff + $self->pingint($user->pingint || 3*60); + $self->nopings(3); + $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(0); - $self->pingrec(0); Log('DXProt', "$call connected"); } @@ -703,6 +708,7 @@ sub normal # it's a reply, look in the ping list for this one my $ref = $pings{$field[2]}; if ($ref) { + my $tochan = DXChannel->get($field[2]); while (@$ref) { my $r = shift @$ref; my $dxchan = DXChannel->get($r->{call}); @@ -710,14 +716,18 @@ sub normal my $t = tv_interval($r->{t}, [ gettimeofday ]); if ($dxchan->is_user) { my $s = sprintf "%.2f", $t; - $dxchan->send($dxchan->msg('pingi', $field[2], $s)) + my $ave = sprintf "%.2f", $tochan ? ($tochan->pingave || $t) : $t; + $dxchan->send($dxchan->msg('pingi', $field[2], $s, $ave)) } elsif ($dxchan->is_ak1a) { - my $tochan = DXChannel->get($field[2]); if ($tochan) { $tochan->nopings(3); # pump up the timer - $tochan->{pingtime} += $t; - $tochan->{pingrec} += 1; - $tochan->{pingave} = $tochan->{pingtime} / $tochan->{pingrec}; + push @{$tochan->pingtime}, $t; + shift @{$tochan->pingtime} if @{$tochan->pingtime} > 6; + my $st; + for (@{$tochan->pingtime}) { + $st += $_; + } + $tochan->{pingave} = $st / @{$tochan->pingtime}; } } } @@ -805,6 +815,8 @@ sub finish my $call = $self->call; my $ref = DXCluster->get_exact($call); + $self->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', "System Op"))); + # unbusy and stop and outgoing mail my $mref = DXMsg::get_busy($call); $mref->stop_msg($call) if $mref;