X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fcluster.pl;h=fa793f22365ebd6dc66fd8044026d81e57088f68;hb=5d197c9f7aa2ea796d86aa5473f93956b24cf1b7;hp=32f90d88ded118a462f2b75bc247352d3d23c726;hpb=97d5445b1e468d9228367640421b2f90ac021224;p=spider.git diff --git a/perl/cluster.pl b/perl/cluster.pl index 32f90d88..fa793f22 100755 --- a/perl/cluster.pl +++ b/perl/cluster.pl @@ -44,13 +44,15 @@ use Prefix; use Bands; use Geomag; use CmdAlias; +use Local; + use Carp; package main; @inqueue = (); # the main input queue, an array of hashes $systime = 0; # the time now (in seconds) -$version = "1.13"; # the version no of the software +$version = "1.17"; # the version no of the software $starttime = 0; # the starting time of the cluster # handle disconnections @@ -91,7 +93,7 @@ sub rec # is there one already connected elsewhere in the cluster (and not a cluster) my $user = DXUser->get($call); if ($user) { - if (($user->sort eq 'A' || $call == $myalias) && !DXCluster->get_exact($call)) { + if (($user->sort eq 'A' || $call eq $myalias) && !DXCluster->get_exact($call)) { ; } else { if (DXCluster->get($call) || DXChannel->get($call)) { @@ -141,6 +143,12 @@ sub login sub cease { my $dxchan; + + eval { + Local::finish(); # end local processing + }; + dbg('local', "Local::finish error $@") if $@; + foreach $dxchan (DXChannel->get_all()) { disconnect($dxchan) unless $dxchan == $DXProt::me; } @@ -151,6 +159,7 @@ sub cease # the reaper of children sub reap { + $SIG{'CHLD'} = \&reap; my $cpid = wait; } @@ -245,27 +254,41 @@ DXM->init(); # read in command aliases CmdAlias->init(); -# initialise the protocol engine -DXProt->init(); - # initialise the Geomagnetic data engine Geomag->init(); # initial the Spot stuff Spot->init(); +# initialise the protocol engine +print "reading in duplicate spot and WWV info ...\n"; +DXProt->init(); + + # put in a DXCluster node for us here so we can add users and take them away DXNode->new(0, $mycall, 0, 1, $DXProt::myprot_version); # read in any existing message headers and clean out old crap -print "reading existing message headers\n"; +print "reading existing message headers ...\n"; DXMsg->init(); DXMsg::clean_old(); # read in any cron jobs -print "reading cron jobs\n"; +print "reading cron jobs ...\n"; DXCron->init(); +# starting local stuff +print "doing local initialisation ...\n" +eval { + Local::init(); +}; +dbg('local', "Local::init error $@") if $@; + + + +# print various flags +#print "useful info - \$^D: $^D \$^W: $^W \$^S: $^S \$^P: $^P\n"; + # this, such as it is, is the main loop! print "orft we jolly well go ...\n"; for (;;) { @@ -283,6 +306,10 @@ for (;;) { DXCommandmode::process(); # process ongoing command mode stuff DXProt::process(); # process ongoing ak1a pcxx stuff DXConnect::process(); + eval { + Local::process(); # do any localised processing + }; + dbg('local', "Local::process error $@") if $@; } if ($decease) { last if --$decease <= 0;