XenForo 2.*.* Вывод Онлайна

  • Мы были бы рады видеть вас на нашем многоцелевом Discord сервере, где вы можете провести время за занятными общениями и, возможно, найти людей с общими интересами. Заходите, мы всегда вам рады. Приглашение на наш сервер: https://discord.gg/kEdafXB
  • Рекомендуем посетить сайт студии TechGate для получения большей информации о дополнениях под XenForo 2.1 и обновление имеющихся на нашем сайте.

Gannibal1

Новый участник
12 Янв 2019
1
0
1
#1
Приветствую , нужна срочно помощь не могу понять что не так
Не работает код!?
Вообщем не подключается или не выводит информацию о статусе сервера
с off-line на on-line сервер включен все прекрастно а он мне выводит что оффлайн при этом онлайн игроков отображается коректно
Код:
<?php

//include "config.php"; // подключаем файл с настройками подключения
class online {

    private $config;
    private $delay;
    private $filename;
    private $maxonline;
    private $online;

    public function __construct() {
        // Данные для соединения с базой сервера
        $this->config['host'] = 'localhost';
        $this->config['user'] = 'root';
        $this->config['password'] = '12344321';
        $this->config['db'] = 'xf_forum';
        //-Настройки отображаения статус сервера-//
        $serverlogin="localhost";    // IP сервера     
        $servergame="localhost";    // IP сервера                 
        $portgame="7777";            // Порт игрового сервера  [7777]
        $portlogin="2106";            // Порт логин сервера                [2106]
        
        //Настройки
        $this->filename = 'cache.txt'; //имя файла,  В нем будет хранится реальный онлайн
        $this->delay = 120; // Время обновления онлайна из базы . например для обновления раз в 5 минут необходимо установить значение 300
    }

    public function get_online()
    {
        $this->new_online();
            $online = ($this->online);
            return round($online);
    }
    

    private function new_online() {
        $last_update = time() - filemtime($this->filename);
        if ($last_update > $this->delay) {
            $this->online = $this->refresh_online();
            $fp = fopen($this->filename, 'w');
            fwrite($fp, $this->online);
            fclose($fp);
            return true;
        } else {
            $fp = fopen($this->filename, "r");
            if ($fp) {
                $this->online = fgets($fp, 999);
            }
            fclose($fp);
            return true;
        }
    }

    private function refresh_online() {
        $conn = new mysqli($this->config['host'], $this->config['user'], $this->config['password'], $this->config['db']);
        $query = "SELECT  count(0) FROM `characters` WHERE `online`!=0";
        $result = $conn->query($query);
        if (!$result) {
            return false;
        }
        $rows = $result->fetch_assoc();
        $conn->close();
        $result->free();
        return $rows['count(0)'];
    }
    


}




class status_bar {
    public static function renderWidget(\XF\Widget\AbstractWidget $abstractWidget)
    {
    
       $online = new online; // Создает переменную Онлайна

        $fp = @fsockopen($servergame, $portgame, $errno, $errstr, 1);
        $fp = @fsockopen($serverlogin, $portlogin, $errno, $errstr, 1);

        $game = ($fp >= 1) ? 'On-line': 'Off-line'; //запрос ответа от гейм сервера
        $login = ($fp >= 1) ? 'On-line': 'Off-line'; //запрос ответа от гейм сервера


        return $abstractWidget->renderer('server_widget', [
            // Здесь нужно указать параметры, которые нужно отображать в виджете
            'online_2' => $online->get_online(), //Выводит  Онлайн
            'status_2' => $login, //логин сервер
            'status_1' => $game //гейм сервер
        ]);
    }
}
 

Сейчас просматривают: Никто не смотрит!