use Msg;
use DXM;
use DXUtil;
+use DXVars;
use DXDebug;
use Filter;
$self->send_file($main::motd) if (-e $main::motd);
$self->state('prompt'); # a bit of room for further expansion, passwords etc
$self->{priv} = $user->priv || 0;
- $self->{lang} = $user->lang || 'en';
+ $self->{lang} = $user->lang || $main::lang || 'en';
$self->{pagelth} = $user->pagelth || 20;
$self->{priv} = 0 if $line =~ /^(ax|te)/; # set the connection priv to 0 - can be upgraded later
$self->{consort} = $line; # save the connection type
$self->send($self->msg('qll')) if !$user->qra || (!$user->lat && !$user->long);
$self->send($self->msg('hnodee1')) if !$user->qth;
$self->send($self->msg('m9')) if DXMsg::for_me($call);
- $self->send($self->msg('pr', $call));
+ $self->prompt;
# decide on echo
if (!$user->wantecho) {
sub prompt
{
my $self = shift;
- $self->send($self->msg($self->here ? 'pr' : 'pr2', $self->call));
+ $self->send($self->msg($self->here ? 'pr' : 'pr2', $self->call, cldate($main::systime), ztime($main::systime)));
}
# broadcast a message to all users [except those mentioned after buffer]
pinge1 => 'Cannot ping yourself!',
pingint => 'Ping interval on $_[0] set to $_[1] secs',
'pos' => 'From Callsign: $_[0] Lat: $_[1] Long: $_[2]',
- pr => '$_[0] de $main::mycall $main::cldate $main::ztime >',
- pr2 => '($_[0]) de $main::mycall $main::cldate $main::ztime >',
+ pr => '$_[0] de $main::mycall $_[1] $_[2] >',
+ pr2 => '($_[0]) de $main::mycall $_[1] $_[2] >',
priv => 'Privilege level changed on $_[0]',
prx => '$main::mycall >',
qll => 'Please enter your location with set/location or set/qra',
password => 'Wachtwoord gezet of gewijzigd voor $_[0]',
pingo => 'Ping gestart naar $_[0]',
pingi => 'Ping ontvangen van $_[0] $_[1] (Ave $_[2]) secs',
- pr => '$_[0] de $main::mycall $main::cldate $main::ztime >',
- pr2 => '($_[0]) de $main::mycall $main::cldate $main::ztime >',
+ pr => '$_[0] de $main::mycall $_[1] $_[2] >',
+ pr2 => '($_[0]) de $main::mycall $_[1] $[2] >',
priv => 'Privilege level gewijzigd op $_[0]',
prx => '$main::mycall >',
qll => 'Geef uw locator met set/location of set/qra',
# try to create and lock a lockfile (this isn't atomic but
# should do for now
- $lockfn = "$root/perl/cluster.lock"; # lock file name
+ my $lockfn = "$root/perl/cluster.lock"; # lock file name
if (-e $lockfn) {
open(CLLOCK, "$lockfn") or die "Can't open Lockfile ($lockfn) $!";
my $pid = <CLLOCK>;
close CLLOCK;
}
+
use Msg;
use DXVars;
use DXDebug;
package main;
+#use strict;
+#use vars qw(@inqueue $systime $version $starttime $lockfn @outstanding_connects $zombies $root
+# $lang $myalias @debug $userfn $clusteraddr $clusterport $mycall $decease );
+
@inqueue = (); # the main input queue, an array of hashes
$systime = 0; # the time now (in seconds)
$version = "1.45"; # the version no of the software
sub reap
{
my $cpid;
- while (($cpid = waitpid(1, &WNOHANG)) != -1) {
+ while (($cpid = waitpid(-1, WNOHANG)) != -1) {
dbg('reap', "cpid: $cpid");
@outstanding_connects = grep {$_->{pid} != $cpid} @outstanding_connects;
+ $zombies-- if $zombies > 0;
}
dbg('reap', "cpid: $cpid");
}
#############################################################
$starttime = $systime = time;
+$lang = 'en' unless $lang;
# open the debug file, set various FHs to be unbuffered
dbginit();
$SIG{INT} = \&cease;
$SIG{TERM} = \&cease;
$SIG{HUP} = 'IGNORE';
-$SIG{CHLD} = \&reap;
+$SIG{CHLD} = sub { $zombies++ };
$SIG{PIPE} = sub { dbg('err', "Broken PIPE signal received"); };
$SIG{IO} = sub { dbg('err', "SIGIO received"); };
#open(DB::OUT, "|tee /tmp/aa");
for (;;) {
- my $timenow;
# $DB::trace = 1;
Msg->event_loop(1, 0.1);
- $timenow = time;
+ my $timenow = time;
process_inqueue(); # read in lines from the input queue and despatch them
# $DB::trace = 0;
# do timed stuff, ongoing processing happens one a second
if ($timenow != $systime) {
+ reap if $zombies;
$systime = $timenow;
- $cldate = &cldate();
- $ztime = &ztime();
DXCron::process(); # do cron jobs
DXCommandmode::process(); # process ongoing command mode stuff
DXProt::process(); # process ongoing ak1a pcxx stuff