restoreStartupProxyState static method

  1. @visibleForTesting
Future<void> restoreStartupProxyState({
  1. required Future<WindowsServiceStatus> queryStatus(),
  2. required Future<void> restoreViaHttp(),
})

启动期代理状态恢复的决策与执行(init 用)。

仅当服务 SCM 状态为 running 才经 helper HTTP /status 恢复 UI 代理状态 (覆盖「上次退出时代理还在跑」的场景);stopped 时 helper 进程不存在、 HTTP 必然连接拒绝,且代理状态初始即 ProxyState.stopped,无需探测。 notInstalled/unknown/error 同样跳过——恢复是 best-effort,探测不可信时 交由后续真实操作反馈。

HTTP 恢复失败(如 SCM running 但端口瞬态不可达)只记日志不上抛: 连接拒绝为立即失败(不占超时窗口),不值得以 Unhandled Exception 打扰启动链。

拆为静态注入式函数(queryStatus/restoreViaHttp 为注入的异步输入), 公共调用点 init 组装真实依赖——ProfileStorage 目录与 HTTP 客户端在 单测环境均不可用。

Implementation

@visibleForTesting
static Future<void> restoreStartupProxyState({
  required Future<WindowsServiceStatus> Function() queryStatus,
  required Future<void> Function() restoreViaHttp,
}) async {
  if (await queryStatus() != WindowsServiceStatus.running) return;
  try {
    await restoreViaHttp();
  } catch (e) {
    debugPrint('启动期代理状态恢复失败(忽略): $e');
  }
}