X-Git-Url: http://www.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fcluster.pl;h=003ae845becc11c9f73a8292333bfb91e17748c0;hb=dc305f992d75a6b35edda9e1aefab510a3ed617e;hp=1448ba9180a73748bf3faaa48cd131e47e884182;hpb=6f20114b034d329c1e2a4f91f0aba2f6ec4002d4;p=spider.git diff --git a/perl/cluster.pl b/perl/cluster.pl index 1448ba91..003ae845 100755 --- a/perl/cluster.pl +++ b/perl/cluster.pl @@ -102,6 +102,7 @@ use QSL; use Thingy; use RouteDB; use AMsg; +use DXXml; use Data::Dumper; use IO::File; @@ -116,12 +117,12 @@ use strict; use vars qw(@inqueue $systime $version $starttime $lockfn @outstanding_connects $zombies $root @listeners $lang $myalias @debug $userfn $clusteraddr $clusterport $mycall $decease $is_win $routeroot $me $reqreg $bumpexisting - $allowdxby + $allowdxby $dbh $dsn $dbuser $dbpass ); @inqueue = (); # the main input queue, an array of hashes $systime = 0; # the time now (in seconds) -$version = "1.51"; # the version no of the software +$version = "1.52"; # the version no of the software $starttime = 0; # the starting time of the cluster #@outstanding_connects = (); # list of outstanding connects @listeners = (); # list of listeners @@ -133,9 +134,10 @@ $allowdxby = 0; # 1 = allow "dx by ", 0 - don't allow it use vars qw($VERSION $BRANCH $build $branch); $VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ ); $BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ || (0,0)); -$main::build += 1; # add an offset to make it bigger than last system $main::build += $VERSION; $main::branch += $BRANCH; +$main::build += 1; # fudge (put back for now) + # send a message to call on conn and disconnect @@ -172,7 +174,7 @@ sub new_channel # set up the basic channel info # is there one already connected to me - locally? my $user = DXUser->get_current($call); - my $dxchan = DXChannel->get($call); + my $dxchan = DXChannel::get($call); if ($dxchan) { if ($user && $user->is_node) { already_conn($conn, $call, DXM::msg($lang, 'concluster', $call, $main::mycall)); @@ -181,8 +183,7 @@ sub new_channel if ($bumpexisting) { my $ip = $conn->{peerhost} || 'unknown'; $dxchan->send_now('D', DXM::msg($lang, 'conbump', $call, $ip)); - Log('DXCommand', "$call bumped off by $ip, disconnected"); - dbg("$call bumped off by $ip, disconnected"); + LogDbg('DXCommand', "$call bumped off by $ip, disconnected"); $dxchan->disconnect; } else { already_conn($conn, $call, DXM::msg($lang, 'conother', $call, $main::mycall)); @@ -198,7 +199,7 @@ sub new_channel if ($baseuser && $baseuser->lockout || $lock) { if (!$user || !defined $lock || $lock) { my $host = $conn->{peerhost} || "unknown"; - Log('DXCommand', "$call on $host is locked out, disconnected"); + LogDbg('DXCommand', "$call on $host is locked out, disconnected"); $conn->disconnect; return; } @@ -254,13 +255,13 @@ sub cease dbg("Local::finish error $@") if $@; # disconnect nodes - foreach $dxchan (DXChannel->get_all_nodes) { + foreach $dxchan (DXChannel::get_all_nodes) { $dxchan->disconnect(2) unless $dxchan == $main::me; } Msg->event_loop(100, 0.01); # disconnect users - foreach $dxchan (DXChannel->get_all_users) { + foreach $dxchan (DXChannel::get_all_users) { $dxchan->disconnect; } @@ -283,10 +284,12 @@ sub cease $l->close_server; } - dbg("DXSpider version $version, build $build ended") if isdbg('chan'); - Log('cluster', "DXSpider V$version, build $build ended"); + LogDbg('cluster', "DXSpider V$version, build $build ended"); dbgclose(); Logclose(); + + $dbh->finish if $dbh; + unlink $lockfn; # $SIG{__WARN__} = $SIG{__DIE__} = sub {my $a = shift; cluck($a); }; exit(0); @@ -332,6 +335,10 @@ sub AGWrestart $starttime = $systime = time; $lang = 'en' unless $lang; +unless ($DB::VERSION) { + $SIG{INT} = $SIG{TERM} = \&cease; +} + # open the debug file, set various FHs to be unbuffered dbginit(\&DXCommandmode::broadcast_debug); foreach (@debug) { @@ -343,11 +350,25 @@ STDOUT->autoflush(1); $build += $main::version; $build = "$build.$branch" if $branch; -Log('cluster', "DXSpider V$version, build $build started"); +# try to load the database +if ($dsn && -e "$root/perl/DXSql.pm") { + require DXSql; + import DXSql; + + if (DXSql::init()) { + $dbh = DXSql->new($dsn); + $dbh = $dbh->connect($dsn, $dbuser, $dbpass) if $dbh; + } +} + +# try to load XML::Simple +DXXml::init(); # banner -dbg("Copyright (c) 1998-2002 Dirk Koopman G1TLH"); -dbg("DXSpider Version $version, build $build started"); +my ($year) = (gmtime)[5]; +$year += 1900; +LogDbg('cluster', "DXSpider V$version, build $build started"); +dbg("Copyright (c) 1998-$year Dirk Koopman G1TLH"); # load Prefixes dbg("loading prefixes ...");