PHPDaemon\Examples\GameMonitor::updateServer PHP Method

updateServer() public method

public updateServer ( $server )
    public function updateServer($server)
    {
        if (!isset($server['address'])) {
            return;
        }
        $server['address'] = trim($server['address']);
        $app = $this;
        if (isset($app->jobMap[$server['address']])) {
            //\PHPDaemon\Daemon::log('already doing: '.$server['address']);
            return;
        }
        $job = new \PHPDaemon\Core\ComplexJob(function ($job) use($app, $server) {
            unset($app->jobMap[$server['address']]);
            //\PHPDaemon\Daemon::log('Removed job for '.$server['address']. ' ('.sizeof($app->jobMap).')');
            $set = $job->results['info'];
            $set['address'] = $server['address'];
            $set['players'] = $job->results['players'];
            $set['latency'] = $job->results['latency'];
            $set['atime'] = time();
            if (0) {
                \PHPDaemon\Core\Daemon::log('Updated server (' . round(memory_get_usage(true) / 1024 / 1024, 5) . '): ' . $server['address'] . ' latency = ' . round($set['latency'] * 1000, 2) . ' ==== ' . (isset($server['atime']) ? round($set['atime'] - $server['atime']) . ' secs. from last update.' : ' =---= ' . json_encode($server)));
            }
            try {
                $app->servers->upsert(['_id' => $server['_id']], ['$set' => $set]);
            } catch (\MongoException $e) {
                \PHPDaemon\Core\Daemon::uncaughtExceptionHandler($e);
                $app->servers->upsert(['_id' => $server['_id']], ['$set' => ['atime' => time()]]);
            }
        });
        $app->jobMap[$server['address']] = $job;
        //\PHPDaemon\Daemon::log('Added job for '.$server['address']);
        $job('info', function ($jobname, $job) use($app, $server) {
            $app->client->requestInfo($server['address'], function ($conn, $result) use($app, $server, $jobname, $job) {
                $job('players', function ($jobname, $job) use($app, $server, $conn) {
                    $conn->requestPlayers(function ($conn, $result) use($app, $jobname, $job) {
                        $job->setResult($jobname, $result);
                        $conn->finish();
                    });
                });
                $job->setResult($jobname, $result);
            });
        });
        $job('latency', function ($jobname, $job) use($app, $server) {
            $app->client->ping($server['address'], function ($conn, $result) use($app, $jobname, $job) {
                $job->setResult($jobname, $result);
                $conn->finish();
            });
        });
        $job();
    }