public function query($srv_arr) { // No GameQ type - try a basic TCP check if (empty($srv_arr[0]['gameq_name']) || $srv_arr[0]['gameq_name'] == 'none') { // Setup language require DOCROOT . '/lang.php'; $results = array(); // Offline / Not responding if (!fsockopen($srv_arr[0]['ip'], $srv_arr[0]['port'], $errno, $errstr, 4)) { $srv_status = strtolower($lang['offline']); } else { $srv_status = strtolower($lang['online']); } // Add status $srv_id = $srv_arr[0]['id']; $results[$srv_id]['gq_online'] = $srv_status; } else { require DOCROOT . '/includes/GameQ/GameQ.php'; // Have to specify query port for some servers if ($srv_arr[0]['gameq_name'] == 'mta') { $srv_arr[0]['port'] = '22126'; } $server = array('id' => $srv_arr[0]['id'], 'type' => $srv_arr[0]['gameq_name'], 'host' => $srv_arr[0]['ip'] . ':' . $srv_arr[0]['port']); // Call the class, and add your servers. $gq = new GameQ(); $gq->addServer($server); // You can optionally specify some settings $gq->setOption('timeout', 5); // Seconds #$gq->setOption('debug', TRUE); $gq->setFilter('normalise'); $results = $gq->requestData(); } return $results; }
protected function queryServer($server, &$response) { gameservers_include_library('GameQ.php', 'gameq'); $gq = new GameQ(); $gq->addServer($server->id, array($server->config['query']['gametype'], $server->hostname, $server->port)); //$gq->setOption('timeout', 200); // Send requests, and parse the data $gq->setFilter('normalise'); //$gq->setFilter('sortplayers', 'name'); $results = $gq->requestData(); if (isset($results[$server->id])) { $data = $results[$server->id]; $response['raw'] = $data; $response['address'] = $data['gq_address']; $response['port'] = $data['gq_port']; $response['online'] = $data['gq_online'] ? TRUE : FALSE; $response['protocol'] = $data['gq_prot']; $response['game'] = $data['gq_mod']; $response['servername'] = $data['gq_hostname']; $response['mapname'] = $data['gq_mapname']; $response['numplayers'] = $data['gq_numplayers']; $response['maxplayers'] = $data['gq_maxplayers']; $response['extra'] = array(); foreach ($data as $key => $value) { if (strpos($key, 'gq_') !== 0) { $response['extra'][$key] = $value; } } if (!empty($data['players'])) { foreach ($data['players'] as $player_info) { if ($name = $player_info['name']) { $player = new stdClass(); $player->name = check_plain($name); $player->score = 0; $player->time = 0; $response['players'][] = $player; } } } return TRUE; } return FALSE; }
<th class="hidden-xxs">Map <th><i class="fa-circle"></i> </tr> </thead> <tbody> <?php flush(); /* visitor should get better indication that the page is actually loading now */ foreach ($Servers as $Server) { if (strlen($Server) > 11 and strrpos($Server, '#', -strlen($Server)) === False) { list($ServerHost[], $Ports[], $GameType[]) = preg_split("/(:|,)/", $Server); } } $gq = new GameQ(); foreach ($ServerHost as $Index => $Host) { $gq->addServer(array('type' => trim($GameType[$Index]), 'host' => trim($Host) . ":" . trim($Ports[$Index]))); } $results = $gq->setOption('timeout', 1)->setFilter('normalise')->requestData(); foreach ($results as $id => $data) { if (!$data['gq_online']) { $data['gq_address'] = preg_replace('/.steamlug.org/', '.steamlug.org', $data['gq_address'], 1); echo <<<SERVERSTRING \t\t\t<tr class="unresponsive"> \t\t\t\t<td></td> \t\t\t\t<td></td> \t\t\t\t<td></td> \t\t\t\t<td><em>Server Unresponsive</em></td> \t\t\t\t<td><em>{$data['gq_address']}:{$data['gq_port']}</em></td> \t\t\t\t<td><em>0 ⁄ 0</em></td> \t\t\t\t<td class="hidden-xxs"><em>N/A</em></td> \t\t\t\t<td><i class="text-danger fa-circle-o"></i></span></td>