// kernel_process.dart — 桌面端内核子进程管理接口 // // 桌面平台(macOS / Windows / Linux)直接将 sing-box 二进制作为 // 子进程运行,通过其 Clash 兼容 REST API 进行控制。 // // 本文件仅定义接口契约;具体实现由任务 11D(桌面 PoC)完成。 // // 进程生命周期: // spawn(configPath) → 子进程启动,REST API 开始监听 // kill() → 优雅停止(SIGTERM),超时后 SIGKILL // // Clash API 通信由 [ClashApiClient] 封装,基地址固定为 // http://127.0.0.1:9090(可覆盖)。 import 'dart:async'; // ── Clash API 客户端 ───────────────────────────────────────────── /// sing-box Clash 兼容 REST API 客户端。 /// 实现由 11D(桌面 PoC)填充;本骨架仅定义调用约定。 class ClashApiClient { ClashApiClient({this.baseUrl = 'http://127.0.0.1:9090'}); final String baseUrl; /// GET /traffic — 流量统计 Future> getTraffic() { throw UnimplementedError('ClashApiClient.getTraffic — 11D 实现'); } /// GET /proxies — 节点列表 Future> getProxies() { throw UnimplementedError('ClashApiClient.getProxies — 11D 实现'); } /// PUT /proxies/{group} — 切换出口 Future selectProxy(String group, String proxy) { throw UnimplementedError('ClashApiClient.selectProxy — 11D 实现'); } /// GET /connections — 实时连接 Future> getConnections() { throw UnimplementedError('ClashApiClient.getConnections — 11D 实现'); } /// DELETE /connections — 关闭所有连接 Future closeAllConnections() { throw UnimplementedError('ClashApiClient.closeAllConnections — 11D 实现'); } } // ── 进程管理接口 ───────────────────────────────────────────────── /// 桌面端内核子进程管理接口。 /// /// 使用方式: /// ```dart /// final kernel = DesktopKernelProcess(); /// await kernel.spawn('/path/to/config.json'); /// final traffic = await kernel.clashApiClient.getTraffic(); /// await kernel.kill(); /// ``` abstract class KernelProcess { /// 启动内核子进程。 /// /// [configPath] 为 sing-box JSON 配置文件的绝对路径。 /// 返回的 [Future] 在进程就绪(REST API 可用)后 complete。 Future spawn(String configPath); /// 停止内核子进程。 /// /// 先发 SIGTERM,[gracePeriod] 内未退出则 SIGKILL。 Future kill({ Duration gracePeriod = const Duration(seconds: 3), }); /// 进程是否正在运行。 bool get isRunning; /// Clash 兼容 REST API 客户端(进程运行时可用)。 ClashApiClient get clashApiClient; /// 进程标准输出/标准错误日志流(用于调试面板)。 Stream get logStream; } // ── 占位实现(防 analyze 报错)──────────────────────────────────── /// 占位实现,抛出 [UnimplementedError]。 /// 11D 替换为真实子进程实现时删除本类。 class DesktopKernelProcess implements KernelProcess { @override Future spawn(String configPath) { throw UnimplementedError('DesktopKernelProcess.spawn — 11D 实现'); } @override Future kill({Duration gracePeriod = const Duration(seconds: 3)}) { throw UnimplementedError('DesktopKernelProcess.kill — 11D 实现'); } @override bool get isRunning => false; @override ClashApiClient get clashApiClient => throw UnimplementedError('DesktopKernelProcess.clashApiClient — 11D 实现'); @override Stream get logStream => throw UnimplementedError('DesktopKernelProcess.logStream — 11D 实现'); }