8.9 KiB
8.9 KiB
🏗️ G-Launcher Architecture & Technical Reference
เอกสารนี้อธิบายสถาปัตยกรรมภายในของ G-Launcher ซึ่งสร้างขึ้นด้วย Wails v3 Alpha ผสานขุมพลังของ Go Backend และ React 19 + TypeScript Frontend
🏛️ ภาพรวมระดับสูง (System Overview)
graph TD
subgraph Frontend["Frontend Layer (React 19 + TypeScript + Vite)"]
UI["React UI (DaisyUI 5 + Tailwind 4)"]
Stores["Zustand Stores (launcherStore, modalStore)"]
Bindings["Auto-generated TypeScript Bindings (@bindings/...)"]
UI <--> Stores
Stores <--> Bindings
end
subgraph IPC["Wails v3 IPC & Event Gateway"]
IPCBridge["Typed IPC Calls & Event Subscriptions"]
Bindings <--> IPCBridge
end
subgraph Backend["Backend Layer (Go 1.24 Core Services)"]
AppSvc["AppService (Window controls, Version info)"]
FSSvc["FSService (Safe IO, Game path persistence)"]
GitSvc["GitService (Updater, MinGit runtime, Proxies)"]
DiffSvc["DiffService (Protobuf diffs, HPatchz, Zift)"]
LangSvc["LanguageService (Thai asset modding & ExcelData)"]
IPCBridge <--> AppSvc
IPCBridge <--> FSSvc
IPCBridge <--> GitSvc
IPCBridge <--> DiffSvc
IPCBridge <--> LangSvc
end
subgraph OS["OS & Filesystem Integration"]
GameExe["Game Process (StarRail.exe / Unity)"]
ConfigDir["%APPDATA%/g-launcher (game-selection.json)"]
ToolsDir["tools/ (MinGit, Go, Node.js portable)"]
AssetsDir["bin/ (7za.exe, hpatchz.exe, zift.exe)"]
end
FSSvc --> GameExe
FSSvc --> ConfigDir
GitSvc --> ToolsDir
DiffSvc --> AssetsDir
LangSvc --> AssetsDir
🧩 บริการหลังบ้านทั้ง 5 ตัว (Go Backend Services)
บริการทั้งหมดถูกประกาศและลงทะเบียนใน main.go ผ่าน app.RegisterService(...):
1. AppService
- จัดการวงจรชีวิตของหน้าต่าง Launcher:
- ย่อหน้าต่าง (
Minimize()), ขยาย/คืนขนาด (ToggleMaximize()), ปิดหน้าต่าง (Close()) - ปิดโปรแกรมอัตโนมัติเมื่อตั้งเวลา (
CloseAppAfterTimeout(seconds)) - คืนค่าเวอร์ชันปัจจุบันของ Launcher (
GetCurrentLauncherVersion())
- ย่อหน้าต่าง (
2. FSService
game-selection.go: บันทึกและอ่านพาธตัวเกมที่ผู้ใช้เลือก โดยใช้วิธี Atomic Write เขียนลงไฟล์ชั่วคราวแล้วเรียกใช้ Windows APIMoveFileExป้องกันไฟล์เสียdialog.go: เปิด Native File Dialog ให้ผู้ใช้เลือกไฟล์ตัวเกม (StarRail.exe)file.go: ตรวจสอบความมีอยู่ของไฟล์ (FileExists()), ตรวจสอบสิทธิ์, ค้นหาโฟลเดอร์
3. GitService
git_runtime.go: ระบบตรวจสอบ Git ในเครื่อง หากไม่มีจะดาวน์โหลด Portable MinGit มาไว้ที่โฟลเดอร์เครื่องมืออัตโนมัติlauncher.go: ระบบอัปเดตตัว Launcher:- ตรวจสอบอัปเดตผ่าน
latest.jsonmanifest หรือ Releases API - อัปเดตผ่านการคอมไพล์จากโค้ดต้นทาง (
BuildAndUpdateFromSource) โดยดาวน์โหลดลง Temp, บิลด์ใน Temp, สลับแทนที่ตัวเก่าด้วยselfupdate.Apply, และลบ Temp ทิ้ง
- ตรวจสอบอัปเดตผ่าน
proxy.go&server.go: ดาวน์โหลดและคลายแพ็กเกจ Local Proxy และ Local Server จาก Release endpoints พร้อมรายงานความคืบหน้าแบบมัลติเธรด
4. DiffService
hpatchz.go: เรียกใช้hpatchz.exeเพื่อแพตช์ไฟล์แบบ Delta diff (.hdiff)ziff.go: รองรับการแพตช์ไฟล์ฟอร์แมต Zift (.ziff) ผ่านzift.exeที่ผสานมาจาก Sunbringerchunk.go: ถอดรหัสและประมวลผล Hoyoverse Protobuf chunk manifests
5. LanguageService
thai-patch.go: ระบบติดตั้ง/ถอนการติดตั้งม็อดภาษาไทยสำหรับเกม โดยแก้ไบต์ในไฟล์ExcelData- สำรองไฟล์เดิมเป็น
.backupก่อนลงมือแก้ไขเสมอ เพื่อให้สามารถกู้คืนได้แบบ Atomic
🎨 สถาปัตยกรรมส่วนหน้า (Frontend Architecture)
- Framework: React 19 + TypeScript + Vite
- UI & Styles: TailwindCSS v4 + DaisyUI v5 (ธีมมินิมอล โมเดิร์น ปรับแต่งจาก Firefly)
- State Management: Zustand:
launcherStore.ts: เก็บสถานะตัวเกม, พาธ, เซิร์ฟเวอร์, พร็อกซี, ความเร็วการดาวน์โหลดmodalStore.ts: ควบคุมการเปิด/ปิด Modal หน้าต่างแจ้งเตือนและอัปเดต
- Localization (i18n): รองรับ 6 ภาษา (
th,en,zh,ja,ko,vi) - IPC Bindings: สร้างจากคำสั่ง
wails3 generate bindingsส่งโค้ดมาที่frontend/bindings/เป็น Type-safe functions ที่เรียกตรงเข้าสู่ Go Backend ได้ทันที
📦 โครงสร้างไฟล์และโฟลเดอร์หลัก
G-Launcher/
├── Doc/ # 📚 เอกสารสถาปัตยกรรมและคู่มือการพัฒนาสำหรับนักพัฒนาและ AI
├── build/ # คอนฟิกการบิลด์, ไอคอน, Windows Manifest, Taskfile
├── frontend/ # React 19 Frontend (Vite, TypeScript, Tailwind)
│ ├── bindings/ # Auto-generated IPC Bindings จาก Wails v3
│ ├── public/ # Static assets & localization files (locales/*.json)
│ └── src/ # React components, pages, stores, hooks
├── internal/ # โค้ด Backend ภาษา Go (แบ่งตาม Domain Services)
│ ├── app-service/ # Window controls & version logic
│ ├── diff-service/ # HPatchz & Zift delta patching
│ ├── fs-service/ # Safe filesystem & game path persistence
│ ├── git-service/ # Self-updater, MinGit, server/proxy downloaders
│ └── language-service/ # Thai patch modding & asset recovery
├── pkg/ # แพ็กเกจ Go ที่ใช้ร่วมกัน
│ ├── constant/ # รวมศูนย์ URL, ค่าคงที่, คอนฟิก (ห้าม Hardcode)
│ ├── firefly/ # Protobuf parser & chunk utilities
│ ├── hpatchz/ # HPatchz CLI wrappers
│ └── sevenzip/ # 7-Zip decompression helpers
├── proto/ # Protobuf definitions
├── scripts/ # สคริปต์ Release และ Bootstrap (bootstrap.ps1)
├── tools/ # (Ignored) โฟลเดอร์เก็บ Portable runtimes (MinGit, Go, Node)
├── AGENTS.md # กฎระเบียบและแนวทางการพัฒนาสำหรับ AI Agent
├── build.bat # สคริปต์คอมไพล์สำหรับ Windows
├── main.go # Entry point ของโปรแกรม และลงทะเบียน Go Services
├── update-and-build.bat # One-click updater & local builder (Zero-Dependency)
└── Taskfile.yml # Task orchestration file