Процессы и их роли
Главный процесс (main)
Расположен вelectron/main/. Отвечает за:
- Запуск Minecraft через
minecraft-launch-worker.ts - Работу с файловой системой и базой данных SQLite (
data.db) - Сетевые запросы к Modrinth, CurseForge, FTB, Laby.net
- Управление серверами (
mc-server:*) - Облачную синхронизацию (Google Drive, Dropbox, Яндекс.Диск и др.)
- IPC-обработчики для всех каналов, определенных в
@xnlc/types
Preload
Файлelectron/preload.ts создает безопасный мост между main и renderer. Экспортирует объект window.electronAPI, типизированный через ElectronAPI из @xnlc/types.
Renderer
React-приложение вsrc/ с i18n (react-i18next), Tailwind 4 и компонентами из components/launcher/.
IPC-контракты
Все каналы IPC централизованы в@xnlc/types (packages/xnlc-types/src/ipc-contracts.ts). Это единый источник правды для:
IpcInvokeMap: типы аргументов и возвращаемых значений для вызываемых каналовIpcEventMap: типы payload для событий (прогресс загрузки, логи сервера и т.д.)ElectronAPI/ElectronAPIExplicit/ElectronAPIExtra: полная поверхность API для preload
1
Обработчик в main
Добавьте обработчик в
electron/main/<feature>/index.ts2
Мост в preload
Добавьте вызов в
electron/preload.ts (window.electronAPI)3
Типизация
Добавьте тип в
src/electron.d.ts4
Контракт
Добавьте сигнатуру в
packages/xnlc-types/src/ipc-contracts.tsВоркер запуска Minecraft
Запуск игры выполняется в отдельном воркереelectron/main/minecraft-launch-worker.ts, а не в главном процессе. Это изолирует:
- Долгие операции загрузки активов и библиотек
- Блокирующие вызовы Java
- Потенциальные сбои при запуске
WorkerLaunchPayload из @xnlc/types и отправляет прогресс через WorkerMessage.
База данных
Локальное хранилище на базе SQLite (better-sqlite3) с файлом data.db. Поддерживается миграции схемы. Содержит:
- Аккаунты (
DbAccount) - Сборки и их контент (
DbBuild,DbBuildLight,DbBuildMod) - Статистику игровых сессий
- Настройки
Архитектура скинов через порты
Модуль@xnlc/skins реализован по принципу портов (ports): логика скинов не зависит от Electron, SQLite или файловой системы. Приложение предоставляет реализацию портов в electron/main/skins/ports.ts, а IPC-каналы в electron/main/skins/index.ts.
Порты:
SkinDiskCache: кэширование текстур на дискSkinLibraryStore: хранилище избранных скиновSkinAccountPort: привязка скинов к аккаунтам