X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fcluster.pl;h=5d6248efa296ab372364f9ddb684e3de8c3c2149;hb=502f900651a46b96008028945616a3b610d6cc7a;hp=be8380c1df0525c18ab69eb6b6d12b274c235344;hpb=88665a2bed3b9ec9e97237938a95a045b2a21bb4;p=spider.git diff --git a/perl/cluster.pl b/perl/cluster.pl index be8380c1..5d6248ef 100755 --- a/perl/cluster.pl +++ b/perl/cluster.pl @@ -60,6 +60,7 @@ use CmdAlias; use Filter; use DXDb; use AnnTalk; +use WCY; use Data::Dumper; use Fcntl ':flock'; @@ -105,6 +106,11 @@ sub rec if (!defined $msg || (defined $err && $err)) { if ($dxchan) { + if (defined $err) { + $conn->disconnect; + undef $conn; + $dxchan->conn(undef); + } $dxchan->disconnect; } elsif ($conn) { $conn->disconnect; @@ -119,18 +125,18 @@ sub rec # is there one already connected to me - locally? my $user = DXUser->get($call); if (DXChannel->get($call)) { - my $mess = DXM::msg($lang, ($user && $user->sort eq 'A') ? 'concluster' : 'conother', $call); + my $mess = DXM::msg($lang, ($user && $user->is_node) ? 'concluster' : 'conother', $call); already_conn($conn, $call, $mess); return; } # is there one already connected elsewhere in the cluster? if ($user) { - if (($user->sort eq 'A' || $call eq $myalias) && !DXCluster->get_exact($call)) { + if (($user->is_node || $call eq $myalias) && !DXCluster->get_exact($call)) { ; } else { if (DXCluster->get_exact($call)) { - my $mess = DXM::msg($lang, $user->sort eq 'A' ? 'concluster' : 'conother', $call); + my $mess = DXM::msg($lang, $user->is_node ? 'concluster' : 'conother', $call); already_conn($conn, $call, $mess); return; } @@ -153,9 +159,9 @@ sub rec } # create the channel - $dxchan = DXCommandmode->new($call, $conn, $user) if ($user->sort eq 'U'); - $dxchan = DXProt->new($call, $conn, $user) if ($user->sort eq 'A'); - $dxchan = BBS->new($call, $conn, $user) if ($user->sort eq 'B'); + $dxchan = DXCommandmode->new($call, $conn, $user) if $user->is_user; + $dxchan = DXProt->new($call, $conn, $user) if $user->is_node; + $dxchan = BBS->new($call, $conn, $user) if $user->is_bbs; die "Invalid sort of user on $call = $sort" if !$dxchan; } @@ -188,7 +194,7 @@ sub cease # disconnect nodes foreach $dxchan (DXChannel->get_all()) { - next unless $dxchan->is_ak1a; + next unless $dxchan->is_node; disconnect($dxchan) unless $dxchan == $DXProt::me; } Msg->event_loop(1, 0.05); @@ -200,7 +206,7 @@ sub cease # disconnect users foreach $dxchan (DXChannel->get_all()) { - next if $dxchan->is_ak1a; + next if $dxchan->is_node; disconnect($dxchan) unless $dxchan == $DXProt::me; } Msg->event_loop(1, 0.05); @@ -333,6 +339,7 @@ CmdAlias->init(); # initialise the Geomagnetic data engine Geomag->init(); +WCY->init(); # initial the Spot stuff Spot->init(); @@ -373,6 +380,11 @@ dbg('err', "orft we jolly well go ..."); #open(DB::OUT, "|tee /tmp/aa"); +$SIG{PIPE} = sub { + #$DB::single = 1; + dbg('err', "Broken PIPE signal received"); +}; + for (;;) { my $timenow; # $DB::trace = 1;