Хостинг серверов Minecraft playvds.com
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление
  3. Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Веб [JSON] Быстрый кэширующийся мониторинг в 4 вариантах

Тема в разделе "Веб-обвязки и лаунчеры", создана пользователем MattRh | IP, 3 ноя 2014.

  1. Автор темы
    MattRh | IP

    MattRh | IP Активный участник Пользователь

    Баллы:
    78
    Skype:
    InfernalPalace
    Имя в Minecraft:
    MattRh
    потерпит без мониторинга, чего уж там
     
  2. Хостинг MineCraft
    <
  3. FantomVipLinux

    FantomVipLinux Активный участник Пользователь

    Баллы:
    78
    Пустое место) А туда нечего воткнуть
     
  4. Автор темы
    MattRh | IP

    MattRh | IP Активный участник Пользователь

    Баллы:
    78
    Skype:
    InfernalPalace
    Имя в Minecraft:
    MattRh
    Да я вот не могу понять, как теперь инфа о серверах идет
     
  5. Автор темы
    MattRh | IP

    MattRh | IP Активный участник Пользователь

    Баллы:
    78
    Skype:
    InfernalPalace
    Имя в Minecraft:
    MattRh
    Не, пишу сам - значит пишу сам
     
  6. book777

    book777 Старожил Пользователь

    Баллы:
    123
    Skype:
    nikolia0612
    PHP:
    $server['address'] = '';
    $cache['thetime'] = microtime(true);

    if(!
    $cache['socket'] = @fsockopen($server['address'], 25565$errno$errstr$config['out'])) {
        if(
    ping($cache['thetime']) >= $config['out'] * 1000)
            
    outend(array('error' => 'TIMEOUT'));
        else
        
    outend(array('error' => 'OFF''ping' => ping($cache['thetime'])));
    }
    $server['ping'] = ping($cache['thetime']);
    @
    stream_set_timeout($cache['socket'], $config['out']);
    $cache['version'] = preg_replace('~[^\d\.]+~'''$dbm['version']);// тут берет захешированные данные из БД и определяет версию от 1.7 и до
    if($cache['version']*10 16)
       
    $server += serverNEW($cache['socket'],$server['address']);
    else
       
    $server += serverOLD($cache['socket']);
    outend($server);

    function 
    outend($out) {
        
    ksort($out);
        echo 
    json_encode($out);
        @
    mysql_close($db['connect']);
        exit;
    }
    function 
    ping($ping) {// Вывести пинг
        
    return round((microtime(true)-$ping)*1000);
    }
    function 
    serverOLD($in) {// Работает под обычные ядра (но без игроков и favicon)
        
    fwrite($in"\xFE\x01");
        
    $data fread($in512);
        
    $Len strlen($data);
        if(
    $Len || $data[0] !== "\xFF") {
            return array(
    'error' => 'UNKNOWN_ERROR');
        }
        
    $data substr($data3);
        
    $data iconv('UTF-16BE''UTF-8'$data);
        if(
    $data [1] === "\xA7" && $data[2] === "\x31") {
            
    $data explode("\x00"$data);
            return  array(
                
    'motd' => motd($data[3]),
                
    'player_online' => intval($data[4]),
                
    'player_max' => intval($data[5]),
                
    'percent' => @floor((intval($data[4])/intval($data[5]))*100),
                
    'version' => $data[2]
            );
        }
        
    $data explode("\xA7"$data);
        return array(
            
    'motd' => motd(substr($data[0], 0, -1)),
            
    'player_online' => isset($data[1]) ? intval($data[1]) : 0,
            
    'player_max' => isset($data[2]) ? intval($data[2]) : 0,
            
    'percent' => @floor((intval($data[1])/intval($data[2]))*100),
            
    'version' => 'UNKNOWN'
        
    );
    }
    function 
    serverNEW($socket$address_in) {// Новая версия с favicon и игроками
        
    if(preg_match('/:/'$adres))
            list(
    $address$port) = explode(':'$adres);
        else {
            
    $address $address_in;
            
    $port 25565;
        }
        
    $data "\x00\x04".Pack('c'StrLen($address)).$address.Pack('n'$port)."\x01";
        
    $data pack('c',StrLen($data)).$data;
        
    fwrite($socket$data);
        
    fwrite($socket"\x01\x00");
        
    $Length readvarint($socket);
        if(
    $Length<10) {
            return array(
    'error' => 'VERSION<1.7');
        }
        
    fgetc($socket);
        
    $Length readvarint($socket);
        
    $data='';
        do {
            
    $Remainder $Length StrLen$data );
            
    $block fread$socket$Remainder );
            if(!
    $block) return array('error' => 'UNKNOWN_ERROR');#    SMALL RETURN
            
    $data .= $block;
        }
        while(
    StrLen($data)<$Length);
        if(
    $data===FALSE) return array('error' => 'UNKNOWN_ERROR');#    RETURN NOT CORRECT
        
    $data JSON_Decode($data,true);
        if(
    JSON_Last_Error()!==JSON_ERROR_NONE) {
            return array(
    'error' => 'UNKNOWN_ERROR');#    DECRYPT ERROR
        
    }
        
    $out['player_max'] = $data['players']['max'];
        
    $out['motd'] = motd($data['description']);
        
    $out['player_online'] = $data['players']['online'];
        
    $out['percent'] = @floor(($out['player_online']/$out['player_max'])*100);
        
    $out['version'] = $data['version']['name'];
        if(
    $data['players']['sample']) {
            foreach(
    $data['players']['sample'] as $ii)
                
    $out['player_name'] .= $ii['name'].', ';
            
    $out['player_name'] = substr($out['player_name'],0,-1);
        }
        
    $out['favicon'] = str_replace("\n","",$data['favicon']);
        return 
    $out;
    }
    function 
    readvarint($asds) {// Дешифратор для новых версий
        
    $i 0;
        
    $j 0;
        while(
    true) {
            
    $k=@fgetc($asds);
            if(
    $k === '') return 0;
            
    $k ord($k);
            
    $i |= ($k&0x7F) << $j ++ * 7;
            if(
    $j>5) return array('error' => 'UNKNOWN_ERROR');#    BIG ARRAY
            
    if(($k&0x80)!=128) break;
        }
        return 
    $i;
    }
    Намешал тут разного всякого. Возьмешь себе нужное

    Прокомментировать нужно?
     
    Последнее редактирование: 6 янв 2015
  7. Автор темы
    MattRh | IP

    MattRh | IP Активный участник Пользователь

    Баллы:
    78
    Skype:
    InfernalPalace
    Имя в Minecraft:
    MattRh
    Ухх... Буду разгр****ь все это... Спасибо
    Комментарии не нужны. Все читаемо
     
  8. book777

    book777 Старожил Пользователь

    Баллы:
    123
    Skype:
    nikolia0612
    немного подправил
     
  9. Автор темы
    MattRh | IP

    MattRh | IP Активный участник Пользователь

    Баллы:
    78
    Skype:
    InfernalPalace
    Имя в Minecraft:
    MattRh
    я правильно понял, что в описание сервера в конфиге входит и версия его ядра?
     
  10. book777

    book777 Старожил Пользователь

    Баллы:
    123
    Skype:
    nikolia0612
    напиши ВК https://vk.com/nikolia0612
     
  11. KiSsAMc

    KiSsAMc Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    KiSsAMc
    Ждём фикса.
     
  12. Автор темы
    MattRh | IP

    MattRh | IP Активный участник Пользователь

    Баллы:
    78
    Skype:
    InfernalPalace
    Имя в Minecraft:
    MattRh
    Таки фикс залит. Еще раз спасибо @book777

    Список изменений:
    1.2:
    - Поправлены стили
    - Исправлен парсер (спасибо @book777 )
    - Исправлена ошибка с тем, что не был установлен часовой пояс
    - Переделана файловая система
    - Добавлены новые фишечки

    Ссылка на скачивание: mon4_v1.2[DOUBLEPOST=1420577606,1420577575][/DOUBLEPOST]
    Извещаю Вас[DOUBLEPOST=1420577638][/DOUBLEPOST]
    И Вас извещаю[DOUBLEPOST=1420577680][/DOUBLEPOST]
    И Вы приглашены на бал
     
  13. KiSsAMc

    KiSsAMc Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    KiSsAMc
    Скачал, устанавливаю, @Vladlen_198 Не отмажешься поставишь :D Спасибо @MattRh | IP :3
     
  14. FantomVipLinux

    FantomVipLinux Активный участник Пользователь

    Баллы:
    78

    Спасибо :)
    Отличная работа!
     
  15. Автор темы
    MattRh | IP

    MattRh | IP Активный участник Пользователь

    Баллы:
    78
    Skype:
    InfernalPalace
    Имя в Minecraft:
    MattRh
    Кинь в лс ссылку на сайт - посмотрю
     
  16. book777

    book777 Старожил Пользователь

    Баллы:
    123
    Skype:
    nikolia0612
    PHP:
    $file['template'] = '../templates/Default/book777.tpl';
    $time['cache'] = 5;// Кеширование (сек)
    // конфиг
    if (file_exists($file['template']) & time() - $time['cache'] < filectime($file['template']))
        exit;
    // кеширование

    ob_start();// начало буверизации

    // скрипт с выводами (есho)


    file_put_contents($file['template'], ob_get_contents());// запись в файл из буфера

    а в шаблоне
    {include file="book777.tpl"}
     
    Последнее редактирование: 7 янв 2015
  17. Автор темы
    MattRh | IP

    MattRh | IP Активный участник Пользователь

    Баллы:
    78
    Skype:
    InfernalPalace
    Имя в Minecraft:
    MattRh
    А зачпм это?
     
  18. book777

    book777 Старожил Пользователь

    Баллы:
    123
    Skype:
    nikolia0612
    подключаешь скрипт к крону, в скрипте делаешь вывод и записываешь в файл (туда уже записывается всё готовое)

    ну а DLE инклудит готовый файл
     
  19. Автор темы
    MattRh | IP

    MattRh | IP Активный участник Пользователь

    Баллы:
    78
    Skype:
    InfernalPalace
    Имя в Minecraft:
    MattRh
    Ну это не для 4 варианта точно
     
  20. Автор темы
    MattRh | IP

    MattRh | IP Активный участник Пользователь

    Баллы:
    78
    Skype:
    InfernalPalace
    Имя в Minecraft:
    MattRh
    Да не, у других в дле подключалось как скрипт, все было ок. Я просто даже не знаю какая ошибка у тебя там вылетает
     
  21. kaniev1

    kaniev1 Активный участник Пользователь

    Баллы:
    78
    Имя в Minecraft:
    iddimass2000
    Опять *Рекорд онлайна: null*
    Он так становится когда все сервера пустые в течении какого-то времени.
     

Поделиться этой страницей