-our $io_disconnected;
-
-sub idle_loop
-{
- my $timenow = time;
-
- BPQMsg::process();
-# DXChannel::process();
-
- # $DB::trace = 0;
-
- # do timed stuff, ongoing processing happens one a second
- if ($timenow != $systime) {
- reap() if $zombies;
- $systime = $timenow;
- my $days = int ($systime / 86400);
- if ($systime_days != $days) {
- $systime_days = $days;
- $systime_daystart = $days * 86400;
- }
- IsoTime::update($systime);
- DXCron::process(); # do cron jobs
- DXCommandmode::process(); # process ongoing command mode stuff
- DXXml::process();
- DXProt::process(); # process ongoing ak1a pcxx stuff
- DXConnect::process();
- DXMsg::process();
- DXDb::process();
- DXUser::process();
- DXDupe::process();
- DXCron::process(); # do cron jobs
- IsoTime::update($systime);
- DXProt::process(); # process ongoing ak1a pcxx stuff
- DXConnect::process();
- DXUser::process();
- AGWMsg::process();
-
- Timer::handler();
- DXLog::flushall();
- }
-
- if (defined &Local::process) {
- eval {
- Local::process(); # do any localised processing
- };
- dbg("Local::process error $@") if $@;
- }
-
- while ($ending) {
- my $dxchan;
-
- dbg("DXSpider Ending $ending");
-
- unless ($io_disconnected++) {
-
- # disconnect users
- foreach $dxchan (DXChannel::get_all_users) {
- $dxchan->disconnect;
- }
-
- # disconnect nodes
- foreach $dxchan (DXChannel::get_all_nodes) {
- next if $dxchan == $main::me;
- $dxchan->disconnect(2);
- }
- $main::me->disconnect;
- }
-
- Mojo::IOLoop->stop if --$ending <= 0;
- }
-}