Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

LGSL не опрашивает TS3 сервер

Статус пользователя Bloo
сообщение 27.12.2014, 16:49
Сообщение #1


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Вчера решил поставить LGSL все хорошо за исключением того что не опрашивается сервер TS3. Всегда оффлайн. Думал из за портов, но нет. Открыл все порты которые он юзает, в том числе и UDP открыл.
Все равно не опрашивает. Думаю уже может дело в настройке самого TS? Порты не менял, используются стандартные. TS в LGSL добавил так

Может тут что то начудил?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 27.12.2014, 22:19
Сообщение #2
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

Bloo,
может сервер как-то блочит? хотя бред скорей всего....
попробуй открыть порты и перезагрузить систему (роутре или что там у тебя)
попробуй опросить другой сервер
попробуй посмотреть лога ошибок в сокетах
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 27.12.2014, 22:28
Сообщение #3


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Orty_Hart, нет, блочить ничего не может. Все нужные порты открыты и их ничего блокировать не должно. Портами и трафиком заведует Kerio он в лайв режиме все открывает. Щас попробую через XF отловить ошибку.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 27.12.2014, 22:38
Сообщение #4


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Orty_Hart, вот что удалось отловить в XF
Код
ErrorException: Fatal Error: Call to undefined method ts3admin::checkSelected() - lgsl\lgsl_files\opt_classes\ts3.class.php:49

В 49 строке функция (49 это вторая из приложенных):
Код
function serverInfo() {
                if(!$this->runtime['selected']) { return $this->checkSelected(); }
                return $this->getData('array', 'serverinfo');
        }

На всякий случай сам класс
Код
<?PHP
class ts3admin {

        private $runtime = array('socket' => '', 'selected' => false, 'host' => '', 'queryport' => '10011', 'timeout' => 2, 'debug' => array(), 'fileSocket' => '');

        function channelList($params = '') {
                if(!$this->runtime['selected']) { return $this->checkSelected(); }
                if(!empty($params)) { $params = ' '.$params; }
              
                return $this->getData('multi', 'channellist'.$params);
        }

        function clientInfo($clid) {
                if(!$this->runtime['selected']) { return $this->checkSelected(); }
                return $this->getData('array', 'clientinfo clid='.$clid);
        }


        function clientList($params = '') {
                if(!$this->runtime['selected']) { return $this->checkSelected(); }
              
                if(!empty($params)) { $params = ' '.$params; }
              
                return $this->getData('multi', 'clientlist'.$params);
        }

        function selectServer($value, $type = 'port', $virtual = false) {
                if(in_array($type, array('port', 'serverId'))) {
                        if($type == 'port') {
                                if($virtual) { $virtual = ' -virtual'; }else{ $virtual = ''; }
                                $res = $this->getData('boolean', 'use port='.$value.$virtual);
                                if($res['success']) {
                                        $this->runtime['selected'] = true;
                                }
                                return $res;
                        }else{
                                $res = $this->getData('boolean', 'use sid='.$value);
                                if($res['success']) {
                                        $this->runtime['selected'] = true;
                                }
                                return $res;
                        }
                }else{
                        return $this->generateOutput(false, array('Error: wrong value type'), false);
                }
        }

        function serverInfo() {
                if(!$this->runtime['selected']) { return $this->checkSelected(); }
                return $this->getData('array', 'serverinfo');
        }

        function __construct($host, $queryport, $timeout = 2) {
                if($queryport >= 1 and $queryport <= 65536) {
                        if($timeout >= 1) {
                                $this->runtime['host'] = $host;
                                $this->runtime['queryport'] = $queryport;
                                $this->runtime['timeout'] = $timeout;
                        }else{
                        }
                }else{
                }
        }

        private function isConnected() {
                if(empty($this->runtime['socket'])) {
                        return false;
                }else{
                        return true;
                }
        }

        private function generateOutput($success, $errors, $data) {
                return array('success' => $success, 'errors' => $errors, 'data' => $data);
        }

        private function unEscapeText($text) {
                $escapedChars = array("\t", "\v", "\r", "\n", "\f", "\s", "\p", "\/");
                $unEscapedChars = array('', '', '', '', '', ' ', '|', '/');
                $text = str_replace($escapedChars, $unEscapedChars, $text);
                return $text;
        }

        public function connect() {
                if($this->isConnected()) {
                        return $this->generateOutput(false, array('Error: the script is already connected!'), false);
                }
                $socket = @fsockopen($this->runtime['host'], $this->runtime['queryport'], $errnum, $errstr, $this->runtime['timeout']);

                if(!$socket) {
                        return $this->generateOutput(false, array('Error: connection failed!', 'Server returns: '.$errstr), false);
                }else{
                        if(strpos(fgets($socket), 'TS3') !== false) {
                                $tmpVar = fgets($socket);
                                $this->runtime['socket'] = $socket;
                                return $this->generateOutput(true, array(), true);
                        }else{
                                return $this->generateOutput(false, array('Error: host isn\'t a ts3 instance!'), false);
                        }
                }
        }

        private function executeCommand($command, $tracert) {
                if(!$this->isConnected()) {
                        return $this->generateOutput(false, array('Error: script isn\'t connected to server'), false);
                }
              
                $data = '';

              
                $splittedCommand = str_split($command, 1024);
              
                $splittedCommand[(count($splittedCommand) - 1)] .= "\n";
              
                foreach($splittedCommand as $commandPart) {
                        fputs($this->runtime['socket'], $commandPart);
                }

                do {
                        $data .= fgets($this->runtime['socket'], 4096);
                      
                        if(strpos($data, 'error id=3329 msg=connection') !== false) {
                                $this->runtime['socket'] = '';
                                return $this->generateOutput(false, array('You got banned from server. Connection closed.'), false);
                        }
                      
                } while(strpos($data, 'msg=') === false or strpos($data, 'error id=') === false);

                if(strpos($data, 'error id=0 msg=ok') === false) {
                        $splittedResponse = explode('error id=', $data);
                        $chooseEnd = count($splittedResponse) - 1;
                      
                        $cutIdAndMsg = explode(' msg=', $splittedResponse[$chooseEnd]);
                      
                      
                        return $this->generateOutput(false, array('ErrorID: '.$cutIdAndMsg[0].' | Message: '.$this->unEscapeText($cutIdAndMsg[1])), false);
                }else{
                        return $this->generateOutput(true, array(), $data);
                }
        }

        private function getData($mode, $command) {
      
                $validModes = array('boolean', 'array', 'multi', 'plain');
      
                if(!in_array($mode, $validModes)) {
                        return $this->generateOutput(false, array('Error: '.$mode.' is an invalid mode'), false);
                }
              
                if(empty($command)) {
                        return $this->generateOutput(false, array('Error: you have to enter a command'), false);
                }
              
                $fetchData = $this->executeCommand($command, debug_backtrace());
              
              
                $fetchData['data'] = str_replace(array('error id=0 msg=ok', chr('01')), '', $fetchData['data']);
              
              
                if($fetchData['success']) {
                        if($mode == 'boolean') {
                                return $this->generateOutput(true, array(), true);
                        }
                      
                        if($mode == 'array') {
                                if(empty($fetchData['data'])) { return $this->generateOutput(true, array(), array()); }
                                $datasets = explode(' ', $fetchData['data']);
                              
                                $output = array();
                              
                                foreach($datasets as $dataset) {
                                        $dataset = explode('=', $dataset);
                                      
                                        if(count($dataset) > 2) {
                                                for($i = 2; $i < count($dataset); $i++) {
                                                        $dataset[1] .= '='.$dataset[$i];
                                                }
                                                $output[$this->unEscapeText($dataset[0])] = $this->unEscapeText($dataset[1]);
                                        }else{
                                                if(count($dataset) == 1) {
                                                        $output[$this->unEscapeText($dataset[0])] = '';
                                                }else{
                                                        $output[$this->unEscapeText($dataset[0])] = $this->unEscapeText($dataset[1]);
                                                }
                                              
                                        }
                                }
                                return $this->generateOutput(true, array(), $output);
                        }
                        if($mode == 'multi') {
                                if(empty($fetchData['data'])) { return $this->generateOutput(true, array(), array()); }
                                $datasets = explode('|', $fetchData['data']);
                              
                                $output = array();
                              
                                foreach($datasets as $datablock) {
                                        $datablock = explode(' ', $datablock);
                                      
                                        $tmpArray = array();
                                      
                                        foreach($datablock as $dataset) {
                                                $dataset = explode('=', $dataset);
                                                if(count($dataset) > 2) {
                                                        for($i = 2; $i < count($dataset); $i++) {
                                                                $dataset[1] .= '='.$dataset[$i];
                                                        }
                                                        $tmpArray[$this->unEscapeText($dataset[0])] = $this->unEscapeText($dataset[1]);
                                                }else{
                                                        if(count($dataset) == 1) {
                                                                $tmpArray[$this->unEscapeText($dataset[0])] = '';
                                                        }else{
                                                                $tmpArray[$this->unEscapeText($dataset[0])] = $this->unEscapeText($dataset[1]);
                                                        }
                                                }                                      
                                        }
                                        $output[] = $tmpArray;
                                }
                                return $this->generateOutput(true, array(), $output);
                        }
                        if($mode == 'plain') {
                                return $fetchData;
                        }
                }else{
                        return $this->generateOutput(false, $fetchData['errors'], false);
                }
        }
}

?>
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 27.12.2014, 22:44
Сообщение #5
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

Bloo,
я сам сталкивался с таким.
если сокет не выдает ошибки, значит 90% что закрыть порты.
возможно их нужно обновить...
ну или сокет работает, а в коде где-то что-то не так получает, и блочит.... (что мало вероятно)

Bloo,
Цитата
return $this->checkSelected()

у тебя через class всё написано.
Поищи там (function|public function|public) checkSelected() {...
и попробуй закоментировать строчку....
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
voed
сообщение 27.12.2014, 22:45
Сообщение #6
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

А вас не смутило, что в классе вообще нет функции "checkSelected"?)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 27.12.2014, 22:48
Сообщение #7
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

voed,
ну для этого я и сказал чтоб его закоментировать....
возможно он в другом классе лежит просто....
возможно не так объявили или её удалили(
(т.е. битый движок)

Отредактировал: Orty_Hart, - 27.12.2014, 22:49
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 27.12.2014, 22:54
Сообщение #8
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Цитата(Orty_Hart @ 27.12.2014, 22:48) *
возможно он в другом классе лежит просто....

По идее, если все "return $this->checkSelected();" заменить на "return true;", все будет работать а лучше закомментировать все "if(!$this->runtime['selected']) { return $this->checkSelected(); }"
Не особо понятно, зачем автор оставлял эти проверки

Отредактировал: voed, - 27.12.2014, 22:57
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 27.12.2014, 23:00
Сообщение #9
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

voed,
я это написал пару постов выше)

вообще, похожая ошибка есть и в инете
например:



Отредактировал: Orty_Hart, - 27.12.2014, 23:00
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 27.12.2014, 23:15
Сообщение #10


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Orty_Hart, в общем ошибки у меня ссыпались из за установленного TeamSpeak Integrator, удалил его фрейворк и классы, LGSL ругаться перестал, но и опрашивать не начал.
Эти ссылки я находил уже вчера, проверял, в скрипе данные правки уже есть. Проблема в общем наверняка не в скрипте, а в сервер. Эх, ладно буду разбираться. Спасибо за помощь.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 27.12.2014, 23:25
Сообщение #11
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

Bloo,
посмотри ссылки под спойлером.... там есть фиксы

да пожалуйста :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 27.12.2014, 23:31
Сообщение #12


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Orty_Hart, я пробовал вчера отсюда из первого поста http://www.greycube.com/site/e107_plugins/...topic.php?15842
Щас пробовал сделать как написал Wussie в том же топике, эффекта нет
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 27.12.2014, 23:54
Сообщение #13


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Хотя очень странно, в GT добавил сервер и он успешно его опрашивает....

В общем я не знаю что это за прикол, но я добавил сервер в GT и мой LGSL начал его нормально мониторить :D
Спасибо всем кто пытался помочь dance3.gif thank_you2.gif pardon.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя kes
сообщение 28.12.2014, 1:05
Сообщение #14


Стаж: 12 лет

Сообщений: 577
Благодарностей: 547
Полезность: 870

В whitelist нужно добавить IP сервера, и сайта тоже не помешает.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя f1nik
сообщение 28.12.2014, 1:38
Сообщение #15


Иконка группы

Стаж: 15 лет

Сообщений: 1862
Благодарностей: 932
Полезность: 1010

Bloo, в настройках тимспика есть раздел по отдаче инфы различным группам привилегии. Все надо настраивать там. Залезаешь в настройки, делаешь их расширенными, выбираешь группу guest и там даешь этой группе доступэ до инфы о сервере, каналах, игроках и т.д.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ezis
сообщение 28.12.2014, 8:38
Сообщение #16
Стаж: 11 лет

Сообщений: 4
Благодарностей: 1
Полезность: 0

Bloo, Поделитесь пожалуйста скриптом на ксен
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 28.12.2014, 10:39
Сообщение #17


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

f1nik, это было сделано сразу же. Я не знаю как связано добавление сервера в GT и работа LGSL, но факт в том что он заработал)))
ezis, http://neugomon.ru/threads/76/
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ezis
сообщение 28.12.2014, 11:20
Сообщение #18
Стаж: 11 лет

Сообщений: 4
Благодарностей: 1
Полезность: 0

Цитата(Bloo @ 28.12.2014, 11:39) *
f1nik, это было сделано сразу же. Я не знаю как связано добавление сервера в GT и работа LGSL, но факт в том что он заработал)))
ezis, http://neugomon.ru/threads/76/

Это не совсем тот мониторинг smile.gif , у Вас он изменен ! Ну на нет и суда нет pardon.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 28.12.2014, 14:15
Сообщение #19


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

ezis, Я просто стили под себя поправил
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: