add bits on sh/debug and set/debug to adminmanual
[spider.git] / perl / cluster.pl
index e062b65ed7c7184808042c4d51c23018af931901..b3b4c5a64595547862a84b244d7d0ab14850b0eb 100755 (executable)
@@ -67,6 +67,7 @@ use DXDupe;
 use BadWords;
 
 use Data::Dumper;
+use IO::File;
 use Fcntl ':flock'; 
 use POSIX ":sys_wait_h";
 
@@ -75,8 +76,10 @@ use Local;
 package main;
 
 use strict;
-use vars qw(@inqueue $systime $version $starttime $lockfn @outstanding_connects $zombies $root
-                  @listeners $lang $myalias @debug $userfn $clusteraddr $clusterport $mycall $decease );
+use vars qw(@inqueue $systime $version $starttime $lockfn @outstanding_connects 
+                       $zombies $root @listeners $lang $myalias @debug $userfn $clusteraddr 
+                       $clusterport $mycall $decease $build
+                  );
 
 @inqueue = ();                                 # the main input queue, an array of hashes
 $systime = 0;                                  # the time now (in seconds)
@@ -102,7 +105,7 @@ sub error_handler
 {
        my $dxchan = shift;
        $dxchan->{conn}->set_error(undef) if exists $dxchan->{conn};
-       $dxchan->disconnect;
+       $dxchan->disconnect(1);
 }
 
 # handle incoming messages
@@ -115,7 +118,8 @@ sub new_channel
        # set up the basic channel info
        # is there one already connected to me - locally? 
        my $user = DXUser->get($call);
-       if ($sort ne 'O' && Msg->conns($call)) {
+       my $dxchan = DXChannel->get($call);
+       if ($dxchan) {
                my $mess = DXM::msg($lang, ($user && $user->is_node) ? 'concluster' : 'conother', $call, $main::mycall);
                already_conn($conn, $call, $mess);
                return;
@@ -150,7 +154,6 @@ sub new_channel
        }
 
        # create the channel
-       my $dxchan;
        $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;
@@ -228,8 +231,8 @@ sub cease
                $_->close_server;
        }
 
-       dbg('chan', "DXSpider version $version ended");
-       Log('cluster', "DXSpider V$version stopped");
+       dbg('chan', "DXSpider version $version, build $build ended");
+       Log('cluster', "DXSpider V$version, build $build ended");
        dbgclose();
        Logclose();
        unlink $lockfn;
@@ -309,10 +312,30 @@ foreach (@debug) {
 }
 STDOUT->autoflush(1);
 
-Log('cluster', "DXSpider V$version started");
+# calculate build number
+$build = $main::version;
+
+if (opendir(DIR, "$main::root/perl")) {
+       my @d = readdir(DIR);
+       closedir(DIR);
+       foreach my $fn (@d) {
+               if ($fn =~ /^cluster\.pl$/ || $fn =~ /\.pm$/) {
+                       my $f = new IO::File "$main::root/perl/$fn" or next;
+                       while (<$f>) {
+                               if (/^#\s+\$Id:\s+[\w\._]+,v\s+(\d+\.\d+)/ ) {
+                                       $build += $1;
+                                       last;
+                               }
+                       }
+                       $f->close;
+               }
+       }
+}
+
+Log('cluster', "DXSpider V$version, build $build started");
 
 # banner
-dbg('err', "DXSpider DX Cluster Version $version", "Copyright (c) 1998-2001 Dirk Koopman G1TLH");
+dbg('err', "DXSpider Version $version, build $build started", "Copyright (c) 1998-2001 Dirk Koopman G1TLH");
 
 # load Prefixes
 dbg('err', "loading prefixes ...");
@@ -421,7 +444,7 @@ dbg('err', "orft we jolly well go ...");
 for (;;) {
 #      $DB::trace = 1;
        
-       Msg->event_loop(10, 0.001);
+       Msg->event_loop(10, 0.010);
        my $timenow = time;
        process_inqueue();                      # read in lines from the input queue and despatch them
 #      $DB::trace = 0;