1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
  2. Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

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

  1. FantomVipLinux

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

    Баллы:
    78

    Что насчет моей проблемы?
     
  2. Автор темы
    MattRh | IP

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

    Баллы:
    78
    Skype:
    InfernalPalace
    Имя в Minecraft:
    MattRh
    С проблемой даты разобрался. А про парсинг написал ранее
    Выложил версию с исправлениями.
    Осталось только придумать, что делать с парсером
     
  3. FantomVipLinux

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

    Баллы:
    78
    Почему так?
    http://clip2net.com/clip/m142580/3b548-clip-2kb.png?nocache=1
     
  4. KiSsAMc

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

    Баллы:
    46
    Имя в Minecraft:
    KiSsAMc
    @MattRh | IP, Поможешь с дизайном для моего проекта, собераю всё лучшее или хорошо забытое старое для проекта, игроки оценят
     
  5. Автор темы
    MattRh | IP

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

    Баллы:
    78
    Skype:
    InfernalPalace
    Имя в Minecraft:
    MattRh
    я не дизайнер
    вы читаете, что я пишу?
     
  6. FantomVipLinux

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

    Баллы:
    78
    Хорошо. Буду ждать. Просто сам запускаю обновленный проект,а не хватает только мониторинга
     
  7. Автор темы
    MattRh | IP

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

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

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

    Баллы:
    78
    Пустое место) А туда нечего воткнуть
     
  9. Vladlen_198

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

    Баллы:
    108
    Skype:
    ultrashock98
    Имя в Minecraft:
    UltraShock
    Так и ничего не получилось :c. Мне ajax понравился, и что сами клиенты делают cron задачу так сказать :D
     
  10. Автор темы
    MattRh | IP

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

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

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

    Баллы:
    108
    Skype:
    ultrashock98
    Имя в Minecraft:
    UltraShock
    Может стоит спросить у @book777
     
  12. Автор темы
    MattRh | IP

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

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

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

    Баллы:
    123
    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
  14. Автор темы
    MattRh | IP

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

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

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

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

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

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

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

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

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

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

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

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

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

    Ссылка на скачивание: mon4_v1.2
    Извещаю Вас
    И Вас извещаю
    И Вы приглашены на бал
     
  20. KiSsAMc

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

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

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