Closed r4sas closed 5 years ago
Проблема такая наблюдается на GoldSource серверах. Причину выяснить ещё не удалось. Проблема скорее всего связана с GameQ библиотекой.
Мне кажется GameQ не тот тип парсера пытается использовать, вот такую кашу он мне выдал на одном из серверов в ПУ:
status : online
hostname : 0
map : nademodes_version
players : 48/0
version : 114
password : yes
joinlink : steam://connect/<SERVERIP>:<PORT>/
Углубленное изучение показало что он не может распарсить A2S_RULES приходящий в разбитом на пакеты ответе.
https://github.com/Austinb/GameQ/issues/287#issuecomment-538049323
Продублирую https://github.com/Austinb/GameQ/issues/287#issuecomment-538064640:
As you can see, A2S_RULES is not processed.
Спасибо за информацию. Отмечу ещё, что в GameAP используется форк -- https://github.com/et-nik/GameQ
Поковыряю тоже её
Да, я видал. Но код для Source не менялся уже годами, так что на данный момент нет разницы на чём проверять.
В итоге я получил что требовалось.
Ситуация такая:
Сейчас проверка на GoldSrc не срабатывает, поскольку сервер отвечает c A2S_INFO с флагом I
(для старых версий ответ был m
).
Из-за этого у нас не активируется переключатель на GoldSrc
// We need to peek and see what kind of engine this is for later processing
//if ($buffer->lookAhead(1) == "\x6d") {
$this->source_engine = self::GOLDSOURCE_ENGINE;
//}
который нужен для использования корректного (старого) для нас метода обработки многопакетного ответа.
// Gold source
if ($this->source_engine == self::GOLDSOURCE_ENGINE) {
// Grab the packet number (byte)
$packet_number = $buffer->readInt8();
...
Если там принудительно указать что мы обрабатываем GoldSrc, то A2S_RULES будет корректно обработан.
Так что в итоге, решением является указание в вашем добавленном классе Protocols/Goldsource что мы работаем с GoldSrc: $source_engine = self::GOLDSOURCE_ENGINE;
.
Спасибо!
Чтобы не плодить иссуи спрошу здесь: а сейчас FastRCON и обычные RCON команды, не реализованы? Вижу что можно указывать команды в конфигурации шаблона сервера, а вот где они сами на странице сервера - не вижу.
Да, ещё не реализованы, к сожалению. FastRCON команды будут списком под консолью. Для RCON будет использоваться библиотека аналогичная GameQ для Query протокола. А так как библиотеки подобной я не находил, то придётся своё решение писать.
Ну ничего, LGSL в крайнем случае спасёт в плане самих запросов :D
GameAP, демон и игровой сервер стоят на одной тачке. Используется предустановленный шаблон ReHLDS, далее сам руками доставлял reunion.
В настройках сервера в ПУ rcon прописан, он совпадает с рконом на сервере. Query и RCON порт в настройказ указан тот же, что порт самого сервера (например 27015 во всех полях).
Некоторые параметры из reunion.cfg:
При всём этом, в ПУ общий статус корректно работает, а query говорит offline.