Files
G-Launcher/Doc/diff-patching-engine.md
T

64 lines
5.4 KiB
Markdown

# 🧩 สัญญาทางเทคนิค: กลไกการแพตช์ไฟล์ตัวเกม (Diff & Patching Engine)
เอกสารนี้ระบุรายละเอียดการทำงานของระบบประมวลผลไฟล์ส่วนต่าง (Delta Patching) และการขยายแพ็กเกจข้อมูลเกมใน G-Launcher ซึ่งผสานเทคโนโลยีจาก Firefly Launcher และ Sunbringer เข้าด้วยกัน
---
## 1. ภาพรวมของเครื่องมือและฟอร์แมตที่รองรับ
| รูปแบบไฟล์ | เครื่องมือประมวลผล | ที่มาของโค้ด | หน้าที่และการทำงาน |
| :--- | :--- | :--- | :--- |
| **`.hdiff`** | `bin/hpatchz.exe` | Firefly / Hoyoverse | ใช้สำหรับอัปเดตไฟล์เกมแบบไบนารีเดลต้า (Byte-level Delta Patch) |
| **`.ziff`** | `bin/zift.exe` | Horoyoi-san (Sunbringer) | อัปเดตไฟล์เกมแบบบีบอัดพิเศษ Zift archive สำหรับม็อดและไฟล์แพตช์เฉพาะ |
| **`.zip` / `.7z`** | `bin/7za.exe` | 7-Zip Portable | คลายไฟล์ข้อมูลเกม แพตช์เสียง และแพ็กเกจเซิร์ฟเวอร์/พร็อกซี |
| **Protobuf Chunk** | `pkg/firefly/` | Firefly Engine | อ่านและถอดรหัส Hoyoverse manifest chunk สำหรับตรวจสอบความสมบูรณ์ของไฟล์ |
---
## 2. กลไกการสกัดเครื่องมือจาก Embed Assets (Tool Extraction Lifecycle)
เพื่อบรรลุเป้าหมาย **Zero-Dependency** ผู้ใช้ปลายทางไม่จำเป็นต้องมี 7-Zip หรือ HDiffz ติดตั้งในเครื่องล่วงหน้า:
1. ไบนารีของเครื่องมือทั้งหมดถูกฝัง (Embed) อยู่ในโค้ด Go ผ่าน `//go:embed assets/*` ใน [`main.go`](../main.go)
2. เมื่อ Launcher เริ่มทำงาน ฟังก์ชันตรวจสอบจะสแกนโฟลเดอร์ `bin/`:
* หากตรวจไม่พบ `bin/7za.exe`, `bin/hpatchz.exe` หรือ `bin/zift.exe`
* ระบบจะดึงไบต์จากหน่วยความจำออกมาเขียนเป็นไฟล์ executable ในโฟลเดอร์ `bin/` อัตโนมัติ พร้อมตั้งสิทธิ์การรัน
3. ไฟล์ที่ได้รับการดูแล:
* `bin/7za.exe`, `bin/7za.dll`, `bin/7zxa.dll`
* `bin/hpatchz.exe`
* `bin/zift.exe`
---
## 3. กฎความปลอดภัยของข้อมูลตัวเกม (Safe Backup & Atomic Rollback)
ไฟล์ตัวเกมมีขนาดใหญ่หลายสิบกิกะไบต์และเสียหายได้ง่าย หากการแพตช์ล้มเหลวระหว่างทาง ห้ามทิ้งไฟล์ให้อยู่ในสภาพพัง:
```
[เริ่มต้นแพตช์ไฟล์: StarRailBase.dll]
│
▼
1. สำรองไฟล์เดิม (Safe Backup)
└── คัดลอก StarRailBase.dll -> StarRailBase.dll.backup
│
▼
2. ดำเนินการแพตช์ด้วย HPatchz หรือ Zift
└── hpatchz.exe StarRailBase.dll patch.hdiff StarRailBase.dll.tmp
│
▼
3. ตรวจสอบความถูกต้อง (Checksum Verification)
├── หากผลลัพธ์ตรงกับ Checksum ที่กำหนด:
│ ├── สลับ StarRailBase.dll.tmp -> StarRailBase.dll
│ └── ลบไฟล์สำรอง StarRailBase.dll.backup ทิ้ง
│
└── หากเกิดข้อผิดพลาด / Checksum ไม่ตรง:
├── ลบไฟล์ชั่วคราว StarRailBase.dll.tmp ทิ้งทันที
├── Atomic Rollback: กู้คืนไฟล์จาก StarRailBase.dll.backup
└── ส่งข้อความแจ้งเตือนความล้มเหลวให้ผู้ใช้ทราบอย่างชัดเจน
```
---
## 4. สถานะการทดสอบและข้อจำกัด
* **ความพร้อมของระบบ:** โครงสร้าง Service และ Command Execution เขียนเสร็จสมบูรณ์ 100% ใน `internal/diff-service/`
* **ขอบเขตที่รอการยืนยัน:** การทดสอบด้วยไฟล์ `.ziff` และ `.hdiff` ขนาดใหญ่ของตัวเกมจริง ต้องรอการทดสอบร่วมกับไฟล์แพตช์จริงในสภาพแวดล้อมของผู้ใช้