@ISA = qw(DXChannel);
+require 5.10.1;
+
use POSIX qw(:math_h);
use DXUtil;
use DXChannel;
use VE7CC;
use DXXml;
use AsyncMsg;
+use JSON;
+use Time::HiRes qw(gettimeofday tv_interval);
use Mojo::IOLoop;
use Mojo::IOLoop::ForkCall;
$self->{ann_talk} = $user->wantann_talk;
$self->{here} = 1;
$self->{prompt} = $user->prompt if $user->prompt;
+ $self->{lastmsgpoll} = 0;
# sort out new dx spot stuff
$user->wantdxcq(0) unless defined $user->{wantdxcq};
my $dxchan;
foreach $dxchan (@dxchan) {
- next if $dxchan->sort ne 'U';
+ next unless $dxchan->{sort} eq 'U';
# send a outstanding message prompt if required
if ($t >= $dxchan->lastmsgpoll + $msgpolltime) {
{
my $s = shift; # the line to be rebroadcast
- foreach my $dxchan (DXChannel::get_all) {
+ foreach my $dxchan (DXChannel::get_all_users) {
next unless $dxchan->{enhanced} && $dxchan->{senddbg};
if ($dxchan->{gtk}) {
$dxchan->send_later('L', dd(['db', $s]));
my @names = readdir(DIR);
closedir(DIR);
my $name;
+
+ return unless @names;
+
foreach $name (@names) {
next if $name =~ /^\./;
$self->send_file($motd) if -e $motd;
}
+sub _diffms
+{
+ return unless isdbg('chan');
+ my $call = shift;
+ my $line = shift;
+ my $ta = shift;
+ my $tb = shift || [gettimeofday];
+
+ my $a = int($ta->[0] * 1000) + int($ta->[1] / 1000);
+ my $b = int($tb->[0] * 1000) + int($tb->[1] / 1000);
+ my $msecs = $b - $a;
+
+ my $s = "forkcall stats: $call '$line' ";
+ $s .= "${msecs}mS";
+ dbg($s);
+}
+
# Punt off a long running command into a separate process
#
-# Hhis is called from commands to run some potentially long running
+# This is called from commands to run some potentially long running
# function. The process forks and then runs the function and returns
# the result back to the cmd.
+#
+# NOTE: this merely forks the current process and then runs the cmd in that (current) context.
+# IT DOES NOT START UP SOME NEW PROGRAM AND RELIES ON THE FACT THAT IT IS RUNNING DXSPIDER
+# THE CURRENT CONTEXT!!
#
-# call: $self->spawn_cmd(\<function>, [cb => sub{...}], [prefix => "cmd> "], [progress => 0|1], [args => [...]]);
+# call: $self->spawn_cmd($original_cmd_line, \<function>, [cb => sub{...}], [prefix => "cmd> "], [progress => 0|1], [args => [...]]);
sub spawn_cmd
{
my $self = shift;
+ my $line = shift;
my $cmdref = shift;
my $call = $self->{call};
my %args = @_;
my $prefix = delete $args{prefix};
my $progress = delete $args{progress};
my $args = delete $args{args} || [];
+ my $t0 = [gettimeofday];
no strict 'refs';
my $fc = Mojo::IOLoop::ForkCall->new;
+ $fc->serializer(\&encode_json);
+ $fc->deserializer(\&decode_json);
$fc->run(
sub {my @args = @_; my @res = $cmdref->(@args); return @res},
$args,
$dxchan->send(@res);
}
}
+ _diffms($call, $line, $t0);
});
+
return @out;
}