{
return unless $main::do_xml;
- eval { require XML::Simple; };
- unless ($@) {
+ eval { require XML::Simple };
+ eval { require XML::Parser } unless $@;
+ if ($@) {
+ LogDbg('err', "do_xml was set to 1 and the XML routines failed to load ($@)");
+ $main::do_xml = 0;
+ } else {
+ $XML::Simple::PREFERRED_PARSER = 'XML::Parser';
import XML::Simple;
$DXProt::handle_xml = 1;
- $xs = new XML::Simple();
+ $xs = new XML::Simple(Cache=>[]);
}
undef $@;
}
#
# note that this a function not a method
#
+
+my $last10;
+my $last_hour;
+
sub process
{
+ my $t = time;
+ my @dxchan = DXChannel::get_all();
+ my $dxchan;
+
+ foreach $dxchan (@dxchan) {
+ next unless $dxchan->is_node;
+ next unless $dxchan->handle_xml;
+ next if $dxchan == $main::me;
+
+ # send a ping out on this channel
+ if ($dxchan->{pingint} && $t >= $dxchan->{pingint} + $dxchan->{lastping}) {
+ if ($dxchan->{nopings} <= 0) {
+ $dxchan->disconnect;
+ } else {
+ DXXml::Ping::add($main::me, $dxchan->call);
+ $dxchan->{nopings} -= 1;
+ $dxchan->{lastping} = $t;
+ $dxchan->{lastping} += $dxchan->{pingint} / 2 unless @{$dxchan->{pingtime}};
+ }
+ }
+ }
+
+
+ # every ten seconds
+ if (!$last10 || $t - $last10 >= 10) {
+ $last10 = $t;
+ }
+
+ # every hour
+ if (!$last_hour || $main::systime - 3600 > $last_hour) {
+ $last_hour = $main::systime;
+ }
}