Информация о файле
Запустите лаунчер, выберите папку с игрой или закиньте в папку с клиентом, обновите клиент и играйте!
Launch the launcher, select the game folder or place it into the client folder, update the client, and play!
Логическая схема исходников
-
Точка входа и однократный запуск.
Program.Mainинициализирует WinForms, проверяет необходимость применения уже скачанного обновления лаунчера черезLauncherUpdateApplier.TryApplyUpdate, затем запускает форму только еслиSingleApplication.Runподтверждает отсутствие второго экземпляра. -
Главная форма (
Form1) как оркестратор. В конструкторе создаются клиент HTTP, логгер, проверяющие/скачивающие компоненты (Hashs,Update,Installer), таймер статуса сервера и иконка в трее; также производится захват исходных ресурсов и настройка DPI.
При показе формы выполняется стартовая цепочка: проверка расположения игры, при необходимости полный клиентский апдейт “first_moon_rising”, проверка флага неудачного обновления, затем автообновление самого лаунчера черезLauncherUpdater; если всё в порядке — показ окна и периодическое обновление статуса сервера. -
Проверка целостности и скачивание патчей.
Hashs.NeedToUpdateAsyncзагружает списки контрольных хэшей для клиентских и системных файлов, сравнивает их с локальными и возвращает перечень архивов, требующих загрузки, параллельно обновляя прогресс-бар и лог.
Update.DownloadFilesAsyncпринимает список архивов, качает их в целевую папку по построенному URL, отображает прогресс и сообщает результаты форме.
Form1.StartGameAsyncсвязывает оба шага: при необходимости качает патчи, распаковывает их вsystem, удаляет временные архивы и запускаетL2.exe, сохраняя и восстанавливая статус сервера в UI. -
Установка/развёртывание лаунчера.
Installerпроверяет наличие типовых игровых папок, при отсутствии запрашивает у пользователя путь, скачивает свежийl2launcher.exeс сервера обновлений, создаёт ярлык на рабочем столе и запускает установленный экземпляр.
Константы путей, URL и имён пакетов/ресурсов сосредоточены вLauncherConfiguration. -
Автообновление самого лаунчера.
LauncherUpdaterсравнивает локальную и удалённую версии, при наличии апдейта скачивает новый бинарник во временную папку, проверяет его версию и запусает новый процесс с аргументами для замены, помечая флагомlauncher_update_pending. -
Сетевые утилиты и HTTP.
LauncherHttpClientсоздаёт единыйHttpClientс поддержкой прокси и таймаутом 30 секунд, используемый всеми сетевыми операциями.
Tools.GetServerLatencyпроверяет доступность сервера по TCP и возвращает пинг в миллисекундах для отображения статуса онлайн. -
Управление окном и пользователем. В
Form1реализованы обработчики для ссылок/кнопок, логирование исключений, обновление текста статуса в UI, работа с треем и масштабирование интерфейса под DPI, а также проверка флага_forceExitи запрос пользовательского сценария закрытия (выход или сворачивание в трей).
Использованные команды
-
Просмотр структуры проекта и ключевых файлов:
ls,ls l2launcherдля ориентировки по каталогам. -
Чтение исходников с нумерацией строк:
nl -ba l2launcher/Program.cs,nl -ba l2launcher/Form1.cs,nl -ba l2launcher/lnchr/Hashs.cs,nl -ba l2launcher/lnchr/Update.cs,nl -ba l2launcher/lnchr/LauncherUpdater.cs,nl -ba l2launcher/LauncherConfiguration.cs,nl -ba l2launcher/lnchr/Http/LauncherHttpClient.cs,nl -ba l2launcher/lnchr/Install.cs,nl -ba l2launcher/lnchr/Tools.cs,nl -ba l2launcher/SingleApplication.cs.{line_range_start=1 line_range_end=27 terminal_chunk_id=C:nl -ba l2launcher/Program.cs | sed -n '1,200p'}{line_range_start=1 line_range_end=252 terminal_chunk_id=C:nl -ba l2launcher/Form1.cs | sed -n '1,260p'}{line_range_start=260 line_range_end=560 terminal_chunk_id=C:nl -ba l2launcher/Form1.cs | sed -n '260,560p'}{line_range_start=560 line_range_end=1108 terminal_chunk_id=C:nl -ba l2launcher/Form1.cs | sed -n '560,1120p'}{line_range_start=1 line_range_end=210 terminal_chunk_id=C:nl -ba l2launcher/lnchr/Hashs.cs | sed -n '1,240p'}{line_range_start=1 line_range_end=92 terminal_chunk_id=C:nl -ba l2launcher/lnchr/Update.cs | sed -n '1,220p'}{line_range_start=1 line_range_end=292 terminal_chunk_id=C:nl -ba l2launcher/lnchr/LauncherUpdater.cs | sed -n '1,320p'}{line_range_start=1 line_range_end=39 terminal_chunk_id=C:nl -ba l2launcher/LauncherConfiguration.cs | sed -n '1,200p'}{line_range_start=1 line_range_end=33 terminal_chunk_id=C:nl -ba l2launcher/lnchr/Http/LauncherHttpClient.cs | sed -n '1,200p'}{line_range_start=1 line_range_end=203 terminal_chunk_id=C:nl -ba l2launcher/lnchr/Install.cs | sed -n '1,240p'}{line_range_start=1 line_range_end=82 terminal_chunk_id=C:nl -ba l2launcher/lnchr/Tools.cs | sed -n '1,200p'}{line_range_start=1 line_range_end=181 terminal_chunk_id=C:nl -ba l2launcher/SingleApplication.cs | sed -n '1,200p'}
Что нового в версии 1.1.49.357-d543c84 Просмотр изменений
Размещено
4a98bb1 Использовать активацию через один экземпляр
b6193e7 Изменить некоторые элементы дизайна
f4d59a3 Исправить ссылки
c502f30 Обрабатывать заблокированные файлы при полном обновлении клиента
d973784 Исправить неоднозначность таймера в Form1
b181cc2 Добавить первый поток обновления клиента (moon rising refresh flow)
0cc2d13 Добавить периодическое обновление статуса сервера
cc536d4 Сделать определение папки клиента нечувствительным к регистру
fa26d73 Отключить invariant globalization в лаунчере
b04d53b Добавить отчёт по аудиту безопасности
36e5852 Обрабатывать null-ситуации при создании ярлыка
234807e Обрабатывать возможный null пути в установщике
5ceae2e Удалить зависимость от COM для ярлыков
79f270f Центрировать лаунчер после изменения экрана
4b3feda Добавить рабочий процесс установки лаунчера
e928b9c Улучшить обработку системных обновлений
9b30baf Использовать HTTPS
7741a35 Скрывать окно лаунчера во время обновлений
f716c44 Логировать извлечённые файлы клиента при обновлении
3fc7340 Улучшить логирование обновлений лаунчера
b4d1064 Убрать вывод временных меток в статус-лейбле
55f6b63 Ограничить шум логов прогресса лаунчера
2a12d2c Обрабатывать частичные совпадения версий при обновлениях лаунчера
С версией 1.1.49.357-d543c84:- Скачать

Рекомендуемые комментарии
Комментариев нет
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.