Как сделать чтобы при нажатии на ссылку запускалось обновление серверов с отчетом времени.
Как вот сдесь mg.amxservera.ru/servers/refresh/
LGSL (обновление серверов)
- Distructor
- Администратор
- Сообщения: 1607
- Зарегистрирован: 28.12.2009
В стандартном движке LGSL при открытии страницы проверяется устарел ли сохраненный ранее кэш или нет. Если устарел - информация обновляется и записывается в кэш.
На приведенном тобой сайте кэш дополнительно можно обновить принудительно нажав на эту кнопку.
Обновление информации при открытии страницы при большом числе серверов, занимает довольно значительное время и пользователи могут закрыть твой мониторинг даже не дождавшись пока он откроется. Поэтому в http://mon.v-tanke.ru и при доработке мониторинга mkden, обновление информации было вынесено в отдельный файл и вызывается автоматически через установленные промежутки времени, в результате чего пользователь сразу получает актуальную информацию. И если он через пару минут обновит страницу, то опять же сразу отобразится текущая информация.
Но если уж сильно хочется сделать как на том сайте, то надо просто вынести функцию обновления в отдельный файл и при обращении к нему запускать обновление кэша.
А отсчет времени сделан на JavaScript и нужен только лишь для того чтоб показать тебе надпись и вернуться назад к списку серверов.
На приведенном тобой сайте кэш дополнительно можно обновить принудительно нажав на эту кнопку.
Обновление информации при открытии страницы при большом числе серверов, занимает довольно значительное время и пользователи могут закрыть твой мониторинг даже не дождавшись пока он откроется. Поэтому в http://mon.v-tanke.ru и при доработке мониторинга mkden, обновление информации было вынесено в отдельный файл и вызывается автоматически через установленные промежутки времени, в результате чего пользователь сразу получает актуальную информацию. И если он через пару минут обновит страницу, то опять же сразу отобразится текущая информация.
Но если уж сильно хочется сделать как на том сайте, то надо просто вынести функцию обновления в отдельный файл и при обращении к нему запускать обновление кэша.
А отсчет времени сделан на JavaScript и нужен только лишь для того чтоб показать тебе надпись и вернуться назад к списку серверов.
- Distructor
- Администратор
- Сообщения: 1607
- Зарегистрирован: 28.12.2009
Описание актуально для LGSL 5.7 в более новых версиях мог измениться порядок аргументов или названия функций,
так что проверяйте их перед заменой.
заменяем lgsl_cron.php на
так что проверяйте их перед заменой.
Код: Выделить всё
<?php
/*-------------------------------------------------------------------------------------------------\
| |
| [ LIVE GAME SERVER LIST ] [ . RICHARD PERRY FROM GREYCUBE.COM ] |
| |
| optimize for external cron by Creaternal (http://coder.v-tanke.ru) |
| |
\-------------------------------------------------------------------------------------------------*/
//------------------------------------------------------------------------------------------------+
require "lgsl_class.php";
lgsl_database();
global $lgsl_config;
//------------------------------------------------------------------------------------------------+
// CRON SETTINGS:
@set_time_limit(3600); // MAXIMUM TIME THE CRON IS ALLOWED TO TAKE
$lgsl_config['cache_time'] = 60; // HOW OLD CACHE MUST BE BEFORE IT NEEDS REFRESHING
$request = "sep"; // WHAT TO PRE-CACHE: [s] = BASIC INFO [e] = SETTINGS [p] = PLAYERS
//------------------------------------------------------------------------------------------------+
$mysql_query = "SELECT `type`,`ip`,`c_port`,`q_port`,`id` FROM `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` WHERE `disabled`=0 ORDER BY `cache_time` ASC";
$mysql_result = mysql_query($mysql_query) or die(mysql_error());
while($mysql_row = mysql_fetch_array($mysql_result, MYSQL_ASSOC))
lgsl_do_cron($mysql_row['type'], $mysql_row['ip'], $mysql_row['c_port'], $mysql_row['q_port'], $mysql_row['id'], $request);
//------------------------------------------------------------------------------------------------+
?>
Код: Выделить всё
function lgsl_do_cron($type, $ip, $c_port, $q_port, $id, $request)
{
global $lgsl_config;
lgsl_database();
$cache = array();
$cache_time = array(0,0,0);
$cache = array();
// SET THE SERVER AS OFFLINE AND PENDING WHEN THERE IS NO CACHE
$cache['b'] = array();
$cache['b']['status'] = 0;
$cache['b']['pending'] = 1;
$cache['b']['type'] = $type;
$cache['b']['ip'] = $ip;
$cache['b']['c_port'] = intval($c_port);
$cache['b']['q_port'] = intval($q_port);
$cache['b']['s_port'] = 0;
$cache['o']['request'] = $request;
$cache['o']['id'] = $id;
$cache['o']['zone'] = 0;
$cache['o']['comment'] = '';
$cache['s'] = array();
$cache['s']['game'] = $type;
$cache['s']['name'] = $lgsl_config['text']['nnm'];
$cache['s']['map'] = $lgsl_config['text']['nmp'];
$cache['s']['players'] = 0;
$cache['s']['playersmax'] = 0;
$cache['s']['password'] = 0;
$cache['e'] = array();
$cache['p'] = array();
if ($request)
{
$live = lgsl_query_live($type, $ip, $c_port, $q_port, $s_port, $request);
// CHECK AND CONVERT TO UTF-8 WHERE NEEDED
$live = lgsl_charset_convert($live, lgsl_charset_detect($live));
// IF SERVER IS OFFLINE PRESERVE SOME OF THE CACHE AND CLEAR THE REST
if (!$live['b']['status'])
{
$live['s']['game'] = $cache['s']['game'];
$live['s']['name'] = $cache['s']['name'];
$live['s']['map'] = $cache['s']['map'];
$live['s']['password'] = $cache['s']['password'];
$live['s']['players'] = 0;
$live['s']['playersmax'] = $cache['s']['playersmax'];
$live['e'] = array();
$live['p'] = array();
}
// MERGE LIVE INTO CACHE
if (isset($live['b'])) { $cache['b'] = $live['b']; }
if (isset($live['s'])) { $cache['s'] = $live['s']; $cache_time[0] = time(); }
if (isset($live['e'])) { $cache['e'] = $live['e']; $cache_time[1] = time(); }
if (isset($live['p'])) { $cache['p'] = $live['p']; $cache_time[2] = time(); }
// UPDATE CACHE
$packed_cache = mysql_real_escape_string(base64_encode(serialize($cache)));
$packed_times = mysql_real_escape_string(implode("_", $cache_time));
$mysql_query = "UPDATE `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` SET `status`='{$cache['b']['status']}',`cache`='{$packed_cache}',`cache_time`='{$packed_times}' WHERE `id`=$id LIMIT 1";
$mysql_result = mysql_query($mysql_query) or die(mysql_error());
}
return true;
}
далее в функции lgsl_query_cached комментируем часть отвечающую за проверку необходимости опроса сервера.
заменяем
Код: Выделить всё
// CHECK WHAT IS NEEDED
$needed = "";
if (strpos($request, "c") === FALSE) // CACHE ONLY REQUEST
{
if (strpos($request, "s") !== FALSE && time() > ($cache_time[0]+$lgsl_config['cache_time'])) { $needed .= "s"; }
if (strpos($request, "e") !== FALSE && time() > ($cache_time[1]+$lgsl_config['cache_time'])) { $needed .= "e"; }
if (strpos($request, "p") !== FALSE && time() > ($cache_time[2]+$lgsl_config['cache_time'])) { $needed .= "p"; }
}
Код: Выделить всё
// CHECK WHAT IS NEEDED
$needed = "";
// if (strpos($request, "c") === FALSE) // CACHE ONLY REQUEST
// {
// if (strpos($request, "s") !== FALSE && time() > ($cache_time[0]+$lgsl_config['cache_time'])) { $needed .= "s"; }
// if (strpos($request, "e") !== FALSE && time() > ($cache_time[1]+$lgsl_config['cache_time'])) { $needed .= "e"; }
// if (strpos($request, "p") !== FALSE && time() > ($cache_time[2]+$lgsl_config['cache_time'])) { $needed .= "p"; }
// }