X-Git-Url: http://www.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=88fed5e31917e3a121d4c214423e49b7132aa9ef;hb=20b0104deaeab77fa7ab1444dbcedfcdbf5865f8;hp=f0a0a3b27d07f1f8885dc5ef54bf537f595d39e0;hpb=0121434f428d8e7d1f31a9d69a4ee250b952b468;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index f0a0a3b2..88fed5e3 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -11,10 +11,13 @@ package DXProt; @ISA = qw(DXChannel); +use strict; + use DXUtil; use DXChannel; use DXUser; use DXM; +use DXCluster; # this is how a pc connection starts (for an incoming connection) # issue a PC38 followed by a PC18, then wait for a PC20 (remembering @@ -22,6 +25,18 @@ use DXM; sub start { my $self = shift; + my $call = $self->call; + + # set the channel sort + $self->sort('A'); + + # set unbuffered + self->send_now('B',"0"); + + # do we have him connected on the cluster somewhere else? + $self->send(pc38()); + $self->send(pc18()); + $self->{state} = 'incoming'; } # @@ -38,7 +53,19 @@ sub normal # sub process { + my $t = time; + my @chan = DXChannel->get_all(); + my $chan; + + foreach $chan (@chan) { + next if $chan->sort ne 'A'; + # send a pc50 out on this channel + if ($t >= $chan->t + $main::pc50_interval) { + $chan->send(pc50()); + $chan->t($t); + } + } } # @@ -48,6 +75,55 @@ sub finish { } + +# +# some active measures +# + +sub broadcast +{ + my $s = shift; + $s = shift if ref $s; # if I have been called $self-> ignore it. + my @except = @_; # to all channels EXCEPT these (dxchannel refs) + my @chan = DXChannel->get_all(); + my ($chan, $except); + +L: foreach $chan (@chan) { + next if $chan->sort != 'A'; # only interested in ak1a channels + foreach $except (@except) { + next L if $except == $chan; # ignore channels in the 'except' list + } + chan->send($s); # send it + } +} + +# +# All the PCxx generation routines +# + +sub pc18 +{ + return "PC18^wot a load of twaddle^$main::myprot_version^~"; +} + +# send all the DX clusters I reckon are connected +sub pc38 +{ + my @list = DXNode->get_all(); + my $list; + my @nodes; + + foreach $list (@list) { + push @nodes, $list->call; + } + return "PC38^" . join(',', @nodes) . "^~"; +} + +sub pc50 +{ + my $n = DXUsers->count; + return "PC50^$main::mycall^$n^H99^"; +} 1; __END__