Исходник API сервер-шлюз для работы с RCON (Пример для майнкрафта)

t.me/maj0rblog
Дизайнер
Статус
Оффлайн
Регистрация
6 Окт 2018
Сообщения
976
Реакции[?]
619
Поинты[?]
12K
Сейчас мы рассмотрим то как можно написать API сервер-шлюз для получения данных с майнкрафт сервера (Можно получать данные со всех игр в которых есть возможность использовать RCON, по типу : CS:GO, Minecraft, Rust. Нужно просто поменять команды и сформировать вывод)

Возможности сервера
- Получение статуса запроса (говнокод/псевдореализация) | "status" : str
- Получение пинга до сервера-шлюза | "wrPing" : str
- Получение времени сервера-шлюза | "wrTime" : str
- Получение TPS сервера | "srvTps" : str
- Получение слотов / онлайна на сервере | "srvSlots" : str
- Получение списка игроков через "," | "playersList" : str (только если онлайн >= 1)

Требования
Python 3.10+
FastAPI (pip)
Uvicorn (pip)
icmplib (pip)
logging (pip)

rcon (pip)

Подключение сервера-шлюза к игровому серверу
Нужно открыть файл rcon.py в папке modules и заменить строки:

ip = "localhost"
port = 2222
passwd = "111111"

на свои, где вы укажете ip вашего RCON / Игрового сервера, RCON порт, RCON пароль.
Перед этим убедитесь что вы включили RCON в настройках вашего игрового сервера.

Запросы на сервер
На данный сервер можно послать только один запрос

GET - localhost:8888/api/server/info

На этот запрос сервер возвращает ответ в виде JSON где есть есть вся информация которая описана в возможностях сервер (выше)
Пример ответа:

{
"status": "okay",
"wrPing": 0.0,
"wrTime": "01:38",
"srvTps": "20",
"srvSlots": "0/20"

}

Пример работы сервера-шлюза:



Запуск сервера
Для запуска сервера просто запустите run.py и откройте порт 8888 (Если что его можно поменять на любой удобный в файле run.py)

Скачать
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
EFI_COMPROMISED_DATA
лучший в мире
Статус
Оффлайн
Регистрация
26 Янв 2018
Сообщения
920
Реакции[?]
1,632
Поинты[?]
85K
В теме символов больше, чем в исходниках(почему не гит)
Единственная (возможно) полезная функция, которую там можно найти является отправкой команды до сервера, но к сожалению оно и так есть в ридми библиотеки, которую ты используешь https://github.com/conqp/rcon

в чем смысл?
 
t.me/maj0rblog
Дизайнер
Статус
Оффлайн
Регистрация
6 Окт 2018
Сообщения
976
Реакции[?]
619
Поинты[?]
12K
В теме символов больше, чем в исходниках(почему не гит)
Единственная (возможно) полезная функция, которую там можно найти является отправкой команды до сервера, но к сожалению оно и так есть в ридми библиотеки, которую ты используешь
Пожалуйста, авторизуйтесь для просмотра ссылки.


в чем смысл?
Смысл в том, что есть много людей которые не знают как это делается. Иначе не писали бы вопросы на этом форуме.
Это просто пример того как сделать безопасное получение информации о сервере.
Ведь нормальный человек вряд-ли выпустит ркон в сеть.
Не гит потому что делал ночью и времени как и желания не было.

Таким же образом можно написать апи сервер который будет иметь авторизацию и отправку на ркон, тем самым если сам сервер выходит в сеть, есть своя нормальная авторизация и возможность отправлять команды на сервер.
 
Пользователь
Статус
Онлайн
Регистрация
28 Фев 2019
Сообщения
650
Реакции[?]
140
Поинты[?]
29K
Я не профессионал и ничего против не имею, но по моему так явно не должно быть. Во-первых, почему код не соблюдает
Пожалуйста, авторизуйтесь для просмотра ссылки.
, во-вторых
в методе первый аргумент это self, если уж сильно не хочется создавать объект класса, почему бы не использовать декоратор staticmethod, дальше зачем использовать 2 ретерна? 1681551815417.png logging встроенная либа ее ставить не нужно, да и по моему как-то многовато либ на такой мелкий проект, да и почему бы не сделать requirements.txt, еще я не уверен, но будет ли тут все хорошо с синхронностью? Ну наверное полезно, но мне не особо понравилось
 
Undetected
Пользователь
Статус
Оффлайн
Регистрация
22 Июн 2019
Сообщения
178
Реакции[?]
63
Поинты[?]
8K
pep8 после этой темы повесился

Зачем использовать пустой класс для 1 функции? Почему не сделать весь сервер асинхронным, если у тебя даже библиотека ркона поддерживает асинхронность?
 
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,570
Реакции[?]
593
Поинты[?]
32K
Я не профессионал и ничего против не имею, но по моему так явно не должно быть. Во-первых, почему код не соблюдает
Пожалуйста, авторизуйтесь для просмотра ссылки.
, во-вторых
в методе первый аргумент это self, если уж сильно не хочется создавать объект класса, почему бы не использовать декоратор staticmethod, дальше зачем использовать 2 ретерна? Посмотреть вложение 244769 logging встроенная либа ее ставить не нужно, да и по моему как-то многовато либ на такой мелкий проект, да и почему бы не сделать requirements.txt, еще я не уверен, но будет ли тут все хорошо с синхронностью? Ну наверное полезно, но мне не особо понравилось
мистер ебаный requirements.txt? мистер pyproject.toml передаёт вам привет
 
Сверху Снизу