Hermes IPC Migration Guide
Panduan step-by-step untuk memigrasi IPC antar-proses pada Hermes Network 360 (Avalonia) dari implementasi Named Pipe + JSON ad-hoc saat ini ke StreamJsonRpc dengan transport factory cross-platform (Windows + macOS).
Hasil akhir yang ditargetkan
Setelah mengikuti seluruh guide ini, codebase Hermes akan memiliki:
- Kontrak IPC bertipe (
IHermesRpcC# interface) — bukan lagiIpcMessageCommandJSON manual. - Framing length-prefix otomatis dari StreamJsonRpc — bebas dari bug
ReadLineAsync()yang truncate payload multi-line. - Request/response correlation built-in via JSON-RPC id — tidak ada lagi race "client hang menunggu balasan".
- Push event dari service ke UI (
OnSaseStatusChanged,OnKcptunLog) menggantikan polling timer 30 detik. - Transport per-OS:
- Windows → Named Pipe (
NamedPipeServerStream+ ACL ketat) - macOS / Linux → Unix Domain Socket (
/var/run/hermes.sock, mode 0600)
- Windows → Named Pipe (
- Cancellation token end-to-end untuk graceful shutdown.
- Verifikasi peer (process SID Windows / euid macOS) sebelum menerima command privileged.
Apa yang TIDAK diubah
- Domain logic di
ServiceXdr,ServiceRmm,ServiceSase— tetap utuh. - Bus internal UI (
MessageBusProvider.IpcMessageBus) — tetap konsumsi event yang sama. - Format konfigurasi WireGuard / Kcptun.
Migrasi ini hanya menyentuh layer transport IPC, bukan logika bisnis.
Cara membaca guide ini
Baca berurutan. Setiap step membangun di atas step sebelumnya. Step yang independent diberi tag independent.
Konvensi blok kode: Snippet yang diawali komentar
// ❌ BEFOREadalah kode lama yang akan dihapus.// ✅ AFTERadalah kode baru. Diff// 🔄 CHANGEDmenunjukkan baris yang berubah saja.
Lanjutkan ke Current Architecture untuk pahami baseline yang akan dimigrasi.