VantuzLauncher 2.0 — это глубоко переработанная, модульная архитектура лаунчера, построенная на принципах Microkernel и Middleware Pipeline. В отличие от классических монолитных лаунчеров, Vantuz 2.0 является «тупым» исполнителем, чья логика полностью определяется внешним JSON-манифестом (boot.json) и набором независимых плагинов-лезвий.
- Payload-Driven Execution: Вся бизнес-логика (авторизация, загрузка, запуск) описана в JSON. Лаунчер лишь исполняет цепочку шагов.
- Microkernel Architecture: Ядро (
Vantuz.Host) изолировано от конкретных реализаций. Плагины загружаются в отдельные контексты (AssemblyLoadContext). - Hash Pinning & Security: Все плагины проходят проверку SHA-256 перед загрузкой. Подмена DLL невозможна.
- Memory Loading: Плагины загружаются напрямую в память, не блокируя файлы на диске.
- Variable Interpolation: Поддержка динамических переменных в конфиге (например,
{{mcDir}},{{gameArgs}}). - Thread-Safe Reporting: Потокобезопасная передача состояния из фонового конвейера в UI WPF через
IStatusReporter.
- VantuzLauncher: WPF-приложение (UI). Собирает данные, инициализирует ядро.
- Vantuz.Core: Общие контракты, интерфейсы плагинов и контекст выполнения.
- Vantuz.Host: Ядро (Engine). Отвечает за загрузку плагинов, валидацию хэшей и работу конвейера.
- Vantuz.Builder: CLI-утилита для автоматической сборки
boot.jsonи вычисления хэшей плагинов. - Vantuz.Plugins.*: Набор независимых лезвий:
Auth.YggdrasilCommand: Авторизация по протоколу Yggdrasil (CQRS Command).Net.DownloadCommand: Пакетная загрузка файлов с транзакционным коммитом.Net.ApiReaderQuery: Чтение данных из API (CQRS Query).Net.UpdateCommand: Скачивание и подготовка обновлений лаунчера.OS.ExecuteCommand: Запуск процессов с перехватом вывода (CQRS Command).OS.DeltaAnalyzerQuery: Анализ дельты файлов (CQRS Query).OS.LocalMoveCommand: Локальное перемещение файлов (дедупликация).OS.BatchPurgeCommand: Пакетная очистка файлов.Game.InstallerCommand: Установка игровых версий.Game.LaunchCommand: Подготовка запуска игры.Game.VersionValidatorQuery: Проверка установленных версий.Game.MinecraftProvider: Провайдер Minecraft (CmlLib.Core).
Проект полностью автоматизирован через MSBuild. При сборке основного проекта VantuzLauncher автоматически собираются все плагины, копируются в папку plugins и генерируется актуальный boot.json.
- Убедитесь, что установлен .NET 8.0 SDK.
- Клонируйте репозиторий.
- Выполните сборку решения:
dotnet build VantuzLauncher.sln
- Результат будет находиться в:
VantuzLauncher/bin/Debug/net8.0-windows/win-x64/
Логика работы описывается в boot.template.json. Пример цепочки (Pipeline):
{
"plugins": { "Vantuz.Plugins.Auth.dll": "" }, // Хэши заполняются автоматически
"pipeline": [
{
"pluginName": "Auth.Yggdrasil",
"config": { "url": "https://api.authserver.com/authenticate" }
},
{
"pluginName": "Net.Downloader",
"config": {
"url": "https://example.com/file.jar",
"destination": "{{mcDir}}/file.jar"
}
}
]
}- Изоляция: Плагины не имеют прямого доступа к UI. Взаимодействие идет только через
ExecutionContext. - Криптография: Локальные пароли шифруются AES с привязкой к железу пользователя (
MachineName). - Resilience: Любой сбой в плагине корректно обрабатывается ядром через
context.Abort(), не вызывая краш всего приложения.
Чтобы создать новое лезвие, реализуйте интерфейс IVantuzPlugin из Vantuz.Core:
public class MyPlugin : IVantuzPlugin
{
public string Name => "My.CustomPlugin";
public async Task InvokeAsync(ExecutionContext context, JsonElement stepConfig, MiddlewareDelegate next)
{
// Ваша логика здесь
await next(context); // Передать управление дальше
}
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
}VantuzLauncher — Думай как Senior, делай код чистым.