1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
  3. Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Веб-обвязки и лаунчеры", создана пользователем NC22, 4 янв 2013.

  1. Автор темы
    NC22

    NC22 Старожил Пользователь

    Баллы:
    153
    Имя в Minecraft:
    NC22
    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 ]
    Консольный лаунчер, минимальный вариант реализации, в исходных файлах все по максимуму прокомментировано.
    2.png
    Лаунчер с оконным интерфейсом. Мультиклиентный. Максимально раскрыт функционал C_Core . Т.к. разрабатывался вместе с API. Есть доступ ко всем настройкам через формы. Требует наличия библиотеки BussinesSkinForm
    3.png 1.png
    Аналогично с оконным интерфейсом. Одноклиентный. Совмещен с мониторингом серверов ( c_query ), мониторинг не требует никаких дополнительных скриптов на стороне сервера и реализован по принципу внутриигрового, грузит список из servers.dat
    4.png
    По размеру файла лаунчера можно уложится в 1 мегабайт и меньше. С upxом еще меньше.

    Все исходные файлы одним архивом: C_CORE 1.0 | C_CORE 1.1 ( только в версии под Delphi XE )

    Скомпилированные лаунчеры consoleML | ML1998 | TinyLauncher ( + пример файла настроек для сервера с webMCR, загружать через меню настройки )

    Генератор MD5 хэша ( можете и сами такой собрать, благо функций достаточно)
     

    Вложения:

    • c_core10.zip
      Размер файла:
      119,3 КБ
      Просмотров:
      408
    • Md5Check.zip
      Размер файла:
      99,7 КБ
      Просмотров:
      192
    • tinyLauncher.zip
      Размер файла:
      713,6 КБ
      Просмотров:
      548
    Последнее редактирование: 22 янв 2014
  2. SkyLord

    SkyLord Активный участник

    Баллы:
    88
    наконец то! Хоть что то стоящее на Delphi
     
    Сникерсни нравится это.
  3. Bluer

    Bluer Старожил Пользователь

    Баллы:
    153
    Всегда люблю темы от этого автора))
     
    romankov2, zuma2, DragonX и 4 другим нравится это.
  4. Russiablackbird

    Russiablackbird Старожил Пользователь

    Баллы:
    103
    Skype:
    russiablackbird
    А что мусора так много? Можно было и сократить это
     
  5. Автор темы
    NC22

    NC22 Старожил Пользователь

    Баллы:
    153
    Имя в Minecraft:
    NC22
    @Russiablackbird, например
     
    ITrAnEI нравится это.
  6. goul

    goul Старожил Пользователь

    Баллы:
    103
    Skype:
    goul1995
    Имя в Minecraft:
    goul
    Ну вот. Теперь будет соблазн слизать отсюда пару десятков строчек кода :rolleyes:
     
  7. SwiftAdviser

    SwiftAdviser Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    SwiftAdviser
    Великий человек! Теперь мы опережаем иностранцев нашими лаунчерами и веб-обвязками. Боюсь, они нам завидуют.:D
     
    FedorNogopletov, Hephest, DragonX и ещё 1-му нравится это.
  8. Russiablackbird

    Russiablackbird Старожил Пользователь

    Баллы:
    103
    Skype:
    russiablackbird
    Хм ну например вместо громадной функции Md5 можно было юзануть пакет из инди(один хер уже инди включён).
    Да и антифриз это не дело.В потоках надо.
    Путь до папки .appdata/roaming по другому определяется(тот же ShlObj CSIDL).
     
  9. Автор темы
    NC22

    NC22 Старожил Пользователь

    Баллы:
    153
    Имя в Minecraft:
    NC22
    Библиотека расчета MD5 ориентирована на работу с файлами и занимает 10 кб кода ( и то там есть пара неиспользуемых функций "прозапас") . Инди подключен частично, либы IdHashMessageDigest, idHash занимают гораздо больше, не вижу смысла их включать.
    IdAntiFreeze не просто так же писали, по факту обычная "оживлялка" окна, больше и не надо. Но в качестве альтернативного варианта можно и в поток вогнать, и то зачем если единовременно требуется всего одно подключение? Вот кучу серверов мониторить через потоки вполне логичный выбор. А тут вроде и обсуждать не чего.
    Функция GetSysDir, поиск директории основан именно на ShlObj. Где конкретно вы смотрите?

    @SwiftAdviser, @goul, Пользуйтесь и сами делитесь чем нибудь хоть иногда ;)
     
    RVXman и Феликс нравится это.
  10. Russiablackbird

    Russiablackbird Старожил Пользователь

    Баллы:
    103
    Skype:
    russiablackbird
    if (FileExists(tmp+'\.minecraft\bin\minecraft.jar')) then
    Options.gOptions.Game := tmp+'\.minecraft\'
    else if (FileExists(tmp+'\Roaming\.minecraft\bin\minecraft.jar')) then
    Options.gOptions.Game := tmp+'\Roaming\.minecraft\';
     
  11. Автор темы
    NC22

    NC22 Старожил Пользователь

    Баллы:
    153
    Имя в Minecraft:
    NC22
    @Russiablackbird, А теперь выше бери. tmp чему равно как думаешь?
    просто у меня был случай что minecraft разместил себя на папку выше Roamingа, я решил проверять оба случая
     
  12. Russiablackbird

    Russiablackbird Старожил Пользователь

    Баллы:
    103
    Skype:
    russiablackbird
    набор иероглифоф ничего не говорит =)
     
    Attelis нравится это.
  13. Автор темы
    NC22

    NC22 Старожил Пользователь

    Баллы:
    153
    Имя в Minecraft:
    NC22
    @Russiablackbird, tmp := GetSysDir($001a); где $001a - CSIDL_APPDATA
     
  14. Russiablackbird

    Russiablackbird Старожил Пользователь

    Баллы:
    103
    Skype:
    russiablackbird
    тогда найух добавлять опять \roaming?
     
  15. Автор темы
    NC22

    NC22 Старожил Пользователь

    Баллы:
    153
    Имя в Minecraft:
    NC22
    @Russiablackbird, читай выше. Это поиски оригинальной папки майнкрафта. По умолчанию эти строчки программы вообще не выполняются. А ведется поиск и создание оригинальной папки игры.
     
  16. Russiablackbird

    Russiablackbird Старожил Пользователь

    Баллы:
    103
    Skype:
    russiablackbird
    А зачем они тогда нужны раз не выполняются?
     
  17. Автор темы
    NC22

    NC22 Старожил Пользователь

    Баллы:
    153
    Имя в Minecraft:
    NC22
    @Russiablackbird, все зависит от твоих потребностей. Читай код. Create(PROG : string = 'TinyLauncher'; GameDirName : string = 'TWEBMCR'); Если строка GameDirName будет пустой то будет поиск папки офф клиента.
     
  18. никио

    никио Старожил Пользователь

    Баллы:
    123
    Skype:
    googletools
    Имя в Minecraft:
    Googlers
    slenky lol63 зачистка темы под корень.
     
  19. Автор темы
    NC22

    NC22 Старожил Пользователь

    Баллы:
    153
    Имя в Minecraft:
    NC22
    @никио, да ладно. Вполне конструктивный диалог. Что не так?
     
  20. никио

    никио Старожил Пользователь

    Баллы:
    123
    Skype:
    googletools
    Имя в Minecraft:
    Googlers
    Ну диалог можно было обсудить и в лс.
     
    Angel of death нравится это.

Поделиться этой страницей