Информация о файле
Запустите лаунчер, выберите папку с игрой или закиньте в папку с клиентом, обновите клиент и играйте!
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.50.431-70ce5d6 Просмотр изменений
Размещено
db3ca27 Попытка исправить DPI
e76332b Масштабирование ресурсов лаунчера с учетом изменений DPI
0fbecfb Улучшение масштабирования лаунчера при высоком DPI
f99d0f9 Исправление обновления пользовательского имени
fadcac6 Отмена "Улучшение логирования установщика для загрузок"
54e92c0 Улучшение логирования установщика для загрузок
46b1870 Исправление Top
d722f91 Указание идентификатора среды выполнения win-x64
9061b18 Реализация тестовой публикации
b1d0b4e Добавление отсутствующих свойств ресурсов для значков
f04f235 Удаление загрузки запуска dsetup
fe338db Добавление Top
f4bec08 Улучшение обнаружения одного экземпляра для переименованного лаунчера
5c0eaf1 Добавление кнопок социальных сетей
91d3658 Обработка необязательных записей хеша без перезаписи пользовательских файлов
feaf0ea Отображение 'нет' при отсутствие онлайн-пользователей
dc1c4ad Исправлено обнаружение папок при первом запуске, наконец-то
08e1b6d Добавлены сообщения о статусе торговли и GM в сети
4a98bb1 Использование активации одного экземпляра
b6193e7 Изменение некоторых элементов дизайна
f4d59a3 Исправление ссылок

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