use DXUtil;
use DXM;
use DXDebug;
-use FileHandle;
-use Carp;
+use IO::File;
use strict;
sub cread
{
my $fn = shift;
- my $fh = new FileHandle;
+ my $fh = new IO::File;
my $line = 0;
dbg('cron', "cron: reading $fn\n");
# disconnect a locally connected thing
sub disconnect
{
- my $call = uc shift;
- my $dxchan = DXChannel->get($call);
- if ($dxchan) {
- if ($dxchan->is_ak1a) {
- $dxchan->send_now("D", DXProt::pc39($main::mycall, "$main::mycall DXCron"));
- } else {
- $dxchan->send_now('D', "");
- }
- $dxchan->disconnect;
- }
+ my $call = shift;
+ run_cmd("disconnect $call");
}
# start a connect process off
sub start_connect
{
- my $call = uc shift;
- my $lccall = lc $call;
-
- my $prog = "$main::root/local/client.pl";
- $prog = "$main::root/perl/client.pl" if ! -e $prog;
-
- my $pid = fork();
- if (defined $pid) {
- if (!$pid) {
- # in child, unset warnings, disable debugging and general clean up from us
- $^W = 0;
- eval "{ package DB; sub DB {} }";
- $SIG{HUP} = 'IGNORE';
- alarm(0);
- DXChannel::closeall();
- $SIG{CHLD} = $SIG{TERM} = $SIG{INT} = $SIG{__WARN__} = 'DEFAULT';
- exec $prog, $call, 'connect' or dbg('cron', "exec '$prog' failed $!");
- }
- dbg('cron', "connect to $call started");
- } else {
- dbg('cron', "can't fork for $prog $!");
- }
-
- # coordinate
- sleep(1);
+ my $call = shift;
+ # connecting is now done in one place - Yeah!
+ run_cmd("connect $call");
}
# spawn any old job off
# in child, unset warnings, disable debugging and general clean up from us
$^W = 0;
eval "{ package DB; sub DB {} }";
- $SIG{HUP} = 'IGNORE';
- alarm(0);
DXChannel::closeall();
- $SIG{CHLD} = $SIG{TERM} = $SIG{INT} = $SIG{__WARN__} = 'DEFAULT';
+ for (@main::listeners) {
+ $_->close_server;
+ }
+ unless ($main::is_win) {
+ $SIG{HUP} = 'IGNORE';
+ $SIG{CHLD} = $SIG{TERM} = $SIG{INT} = $SIG{__WARN__} = 'DEFAULT';
+ alarm(0);
+ }
exec "$line" or dbg('cron', "exec '$line' failed $!");
}
dbg('cron', "spawn of $line started");
return if !$noderef || !$noderef->pcversion;
# send it
- DXProt::addrcmd($main::mycall, $call, $line);
+ DXProt::addrcmd($DXProt::me, $call, $line);
+}
+
+sub run_cmd
+{
+ my $line = shift;
+ my @in = DXCommandmode::run_cmd($DXProt::me, $line);
+ dbg('cron', "cmd run: $line");
+ for (@in) {
+ s/\s*$//og;
+ dbg('cron', "cmd out: $_");
+ }
}
1;
__END__