[Delphi] [C_Core 1.1] [1.6.x + ] API | Мониторинг |3 лаунчера

[Delphi] [C_Core 1.1] [1.6.x + ] API | Мониторинг |3 лаунчера 2017-04-23

Нет прав для скачивания
Url
logo-DC-Nuevo.png


API для создания лаунчера [ исходники на Delphi, ООП ]​
Исходники ядра, мониторинга серверов и трех лаунчеров-примеров, каждый со своими особенностями.

Скомпоновал в одну тему, чтобы флуда было меньше. С общей темой Delphi исходники.

Необходимый набор для сборки:
  • Delphi 6.0 , 7.0 ( начиная с версии 1.1 XE )
  • Библиотека Abbrevia 5.0 (работа с zip архивами, никаких дополнительных dll )
  • Для версии Delphi 6.0 и ниже INDY 9.0.18

Возможности "из коробки":
  • Авторизация по протоколам оригинального лаунчера\сервера
  • Обработка внештатных ситуаций
  • Обновление клиента по списку файлов ( поддерживаются zip архивы)
  • Игровые настройки
  • Скачивание/загрузка локального файла авто настройки
  • Сохранение/загрузка файла настроек ( поддержка шифрования данных )
  • Проверка подлинности файлов по MD5-хэшу как перед скачиванием так и при запуске игры
  • Авто поиск директории игры и Java

Дополнительно : Мониторинг серверов (загрузка прямо из файла servers.dat)
  • Почему лаунчер качает клиент каждый раз хотя он скачан?
К любому загружаемому файлу на сервере должна быть пара - файл с тем же названием и расширением md5 например windows_natives.jar.md5
содержащий контрольную сумму md5 для этого файла. Генератор контрольной суммы прикложен к сообщению.

В функции DownloadFile это строка Download.hash := DownloadMD5(fname + '.md5');
  • Какое функциональное предназначение параметра в структуре настроек
- Distr_list ?

Options.webOptions.Distr := 'http://s3.amazonaws.com/MinecraftDownload/'; // Сервер - поставщик
Options.webOptions.Distr_list := 'minecraft.jar|jinput.jar|lwjgl.jar|lwjgl_util.jar|windows_natives.jar'; // Выкачиваемые файлы с сервера-поставщика

- GameBuild ?

Оригинальный лаунчер сохраняет в папку с игрой файл с текущей параметром GameBuild, по нему проверяет нужно ли перекачивать игру или нет.
Здесь же этот параметр передается в рамках совместимости со скриптом авторизации webMCR и прочих.

- PassBase ?

Если включен режим шифрования используется мастер-ключ шифрования конфиг файла и всех параметров в памяти лаунчера
(т.е. через программу-взломщик найти и подменить параметр непосредственно в лаунчере не получится, если в настройках задан ключ шифрования).
Но основные параметры естественно в любом случае можно раскрыть при должном желании, это просто защита от дурака, не более.
  • Почему не расспаковывает zip файл?
Рекомендуется использовать архивы без сжатия.
  • По какому протоколу проходит взаимодействие с сервером авторизации?
Протокол соответствует протоколу авторизации MC ниже версии 1.6, а именно

Лаунчер отправляет POST запрос на адресс указанный в webOptions.Login ( например http://s3.amazonaws.com/login/ )

C параметрами

(string) user,
(string) password,
(int) version

Ответ сервера - текстовая строка;

Ответ сервера информирующий об успешной авторизации:

GAME_BUILD:depricated:USER_NAME:SESSION_ID:

где SESSION_ID - идентификатор сессии без префикса token:
depricated - ранее ключ для загрузки файлов с сервера, ныне игнорируемая лаунчером информация
USER_NAME - имя пользователя авторизовавшегося под заданным идентификатором (соответствует POST (string) user)

Ответ информирующий об ошибке:

Old vesion или Bad login

Далее соответсвующий идентификатор сессии и имя пользователя передается запускаемому minecraft-клиенту
  1. Генерация настроек:
    • ссылка на страницу новостей
    • ссылка на страницу авторизации
    • ссылка на страницу регистрации
    • ссылка на папку обновлений
    • ссылка на файл авто настройки
    • список файлов для обновления
    • версия клиента
    • код шифрования
    • триггер запрета изменения настроек ( часть настроек будет доступна только самому ядру, до пользовательского интерфейса они дойдут в виде завуалированной строки )
    • ...
  2. Настройки по умолчанию на конкретный сервер, необходимы только данные для авторизации.
  3. Сброс настроек до настроек по умолчанию
  4. Загрузка файла авто настроек с удаленного сервера. ( синхронизируется версия клиента, ссылка на страницу авторизации и д.р. )
  5. Загрузка локального файла настроек.
  6. Загрузка файла с удаленного сервера с проверкой по md5 необходимости загрузки.
  7. Правила приема файлов: Проверка существующих файлов по md5-хэшу ( описана ниже ) ; Если файл был загружен то для любых файлов копирование в папку bin; для ZIP архивов разархивирование в папку игры; для архива windows_natives.jar разархивирование в подпапку bin\natives;
  8. Загрузка списка файлов по правилам описанным выше.
  9. Проверка установлена ли игра, по ряду ключевых файлов. (Windows)
  10. Сохранение настроек в файл.
  11. Возможность шифрования настроек подключения как в памяти программы так и при сохранении данных в файл.
  12. Запуск игры с проверкой подлинности minecraft.jar по MD5.
  13. Авторизация по протоколам оригинального лаунчера\сервера. Совместимо с webMCR
  14. События для синхронизации интерфейса:
  • Процесс разархивирования zip архива
  • Процесс загрузки файла ( возможность реализовать процентное отображение )
  • Неизвестный ответ от сервера
  • Протокол лаунчера устарел ( ошибка возникает при неудачном чтении файла автонастроек \ настроек )
  • Ответ сервера - Oldversion
  • Сервер авторизации недоступен
  • Ответ сервера - BadLogin
Проверка подлинности файла по MD5-хэшу:

Если файлы не требуют обновления, соответственно они не закачиваются повторно.
(в папке обновлений на сервере, вместе с обновляемым файлом должен быть расположен файл _ИМЯ_ОБНОВЛЯЕМОГО_ФАЙЛА_.md5 в котором содержится MD5-хэш этого файла)
Это самый оптимальный способ проверки.
( если же заставлять сервер каждый раз генерировать MD5 хэш через PHP файл, то это лишний повод для DDOSа т.к. подсчет MD5 для файлов большого размера это весьма ресурсоемкий процесс )

Файлы API
c_core.pas - Основной набор функций
c_query.pas - Функция для мониторинга сервера
c_crypt.pas - шифрование. Реализация тривиальная, взята с просторов.
MD5.pas - набор функций для генерации MD5-хэша, автор Angus Johnson

В архиве c_core_10 три лаунчера и API [ папка c_core ]

Консольный лаунчер, минимальный вариант реализации, в исходных файлах все по максимуму прокомментировано.
Лаунчер с оконным интерфейсом. Мультиклиентный. Максимально раскрыт функционал C_Core . Т.к. разрабатывался вместе с API. Есть доступ ко всем настройкам через формы. Требуетналичиябиблиотеки BussinesSkinForm
Аналогично с оконным интерфейсом. Одноклиентный. Совмещен с мониторингом серверов ( c_query ), мониторинг не требует никаких дополнительных скриптов на стороне сервера и реализован по принципу внутриигрового, грузит список из servers.dat
Автор
MoJIcHa
Скачивания
2
Просмотры
167
Первый выпуск
Обновление
Оценка
0,00 звёзд 0 оценок

Другие ресурсы пользователя MoJIcHa