X-Git-Url: http://scm.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fcluster.pl;h=64cbab11ed1d6efc69ed2adc3f6896eb85ca8dee;hb=e6a53556f10b5d2f831dcd7b83655430c9b1a137;hp=8b45e2bd65d805d7fc411650b387a586199d103f;hpb=9e2fbafcfdab1ee45e581524311f1a97ac41f6ad;p=spider.git diff --git a/perl/cluster.pl b/perl/cluster.pl index 8b45e2bd..64cbab11 100755 --- a/perl/cluster.pl +++ b/perl/cluster.pl @@ -60,6 +60,8 @@ use CmdAlias; use Filter; use Local; use DXDb; +use Data::Dumper; + use Fcntl ':flock'; use Carp qw(cluck); @@ -68,9 +70,10 @@ package main; @inqueue = (); # the main input queue, an array of hashes $systime = 0; # the time now (in seconds) -$version = "1.34"; # the version no of the software +$version = "1.35"; # the version no of the software $starttime = 0; # the starting time of the cluster $lockfn = "cluster.lock"; # lock file name +@outstanding_connects = (); # list of outstanding connects # handle disconnections sub disconnect @@ -101,7 +104,9 @@ sub rec my $dxchan = DXChannel->get_by_cnum($conn); # get the dxconnnect object for this message if (defined $err && $err) { - disconnect($dxchan) if defined $dxchan; + if ($dxchan) { + disconnect($dxchan); + } return; } @@ -148,6 +153,7 @@ 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'); die "Invalid sort of user on $call = $sort" if !$dxchan; } @@ -178,9 +184,6 @@ sub cease }; dbg('local', "Local::finish error $@") if $@; - # close all databases - DXDb::closeall; - # disconnect users foreach $dxchan (DXChannel->get_all()) { next if $dxchan->is_ak1a; @@ -211,6 +214,10 @@ sub cease Msg->event_loop(1, 0.05); Msg->event_loop(1, 0.05); DXUser::finish(); + + # close all databases + DXDb::closeall; + dbg('chan', "DXSpider version $version ended"); Log('cluster', "DXSpider V$version stopped"); dbgclose(); @@ -225,6 +232,7 @@ sub reap { $SIG{'CHLD'} = \&reap; my $cpid = wait; + @outstanding_connects = grep {$_->{pid} != $cpid} @outstanding_connects; } # this is where the input queue is dealt with and things are dispatched off to other parts of @@ -260,6 +268,7 @@ sub process_inqueue $dxchan->normal($line); disconnect($dxchan) if ($dxchan->{state} eq 'bye'); } elsif ($sort eq 'Z') { + $dxchan->conn(undef); disconnect($dxchan); } elsif ($sort eq 'D') { ; # ignored (an echo) @@ -296,7 +305,7 @@ STDOUT->autoflush(1); Log('cluster', "DXSpider V$version started"); # banner -print "DXSpider DX Cluster Version $version\nCopyright (c) 1998 Dirk Koopman G1TLH\n"; +print "DXSpider DX Cluster Version $version\nCopyright (c) 1998-1999 Dirk Koopman G1TLH\n"; # load Prefixes print "loading prefixes ...\n";