Информация о файле
Запустите лаунчер, выберите папку с игрой или закиньте в папку с клиентом, обновите клиент и играйте!
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'}

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