3.8 KiB
3.8 KiB
reg 调用流程说明
概述
reg 接口(POST /api/sandbox/config/reg)用于同步本地配置到后端,并获取最新的服务器配置(serverHost/serverPort)。所有启动服务的场景都必须先调用 reg,返回后再启动服务,确保 lanproxy 使用最新的代理服务器地址。
统一流程
reg 调用 → mcpProxy → agent → fileServer → lanproxy
核心原则:reg 必须在 lanproxy 启动之前完成,因为 lanproxy 依赖 reg 返回的 serverHost/serverPort。
各场景流程
| 场景 | 触发位置 | 流程 |
|---|---|---|
| 登录 | ClientPage.handleLogin |
loginAndRegister → reg → mcpProxy → agent → fileServer → lanproxy |
| 启动全部 | ClientPage.handleStartAll |
reg → mcpProxy → agent → fileServer → lanproxy |
| 手动启动单个 | ClientPage.handleStartServiceManual |
直接启动指定服务(不调用 reg) |
| 自动重连 | App.tsx autoReconnect |
reg → mcpProxy → agent → fileServer → lanproxy |
| 退出登录 | ClientPage.handleLogout |
不调用 reg,停止所有服务 |
说明:手动启动单个服务时不调用 reg,因为用户通常在已登录状态下操作,配置已是最新。
代码位置
| 场景 | 文件 | 函数 |
|---|---|---|
| 登录 | src/renderer/components/pages/ClientPage.tsx |
handleLogin |
| 启动全部 | src/renderer/components/pages/ClientPage.tsx |
handleStartAll |
| 手动启动单个 | src/renderer/components/pages/ClientPage.tsx |
handleStartServiceManual |
| 自动重连 | src/renderer/App.tsx |
autoReconnect (useEffect) |
| reg 实现 | src/renderer/services/core/auth.ts |
syncConfigToServer |
| 服务启动 | src/renderer/components/pages/ClientPage.tsx |
handleStartService |
reg 接口参数
interface ClientRegisterParams {
username: string;
password: string; // 手动登录时传入,自动认证时为空字符串
savedKey?: string; // 持久化密钥,跨会话有效(用于自动认证)
deviceId?: string;
sandboxConfigValue: {
hostWithScheme: string;
agentPort: number; // 从 step1_config 读取
vncPort: number;
fileServerPort: number; // 从 step1_config 读取
apiKey?: string;
maxUsers?: number;
};
}
注意:密码不持久化保存。首次登录后,后续自动认证仅依赖 savedKey。
reg 接口返回
interface ClientRegisterResponse {
id: number;
configKey: string;
serverHost?: string; // lanproxy 连接地址
serverPort?: number; // lanproxy 连接端口
online: boolean;
name: string;
token?: string; // webview cookie 同步用
// ...
}
状态管理
Loading 状态
- 不使用全局 loading(已移除
regSyncing状态和 "正在同步配置..." overlay) - 使用服务项局部 loading(
startingServicesSet),覆盖 reg + 启动整个流程
防止重复启动
- 登录流程调用
onLoginStarted()设置内存变量loginStartedRef.current = true - App.tsx 自动重连检查该内存变量,若为 true 则跳过(同一会话内有效,不持久化)
失败处理
| 场景 | reg 失败时行为 |
|---|---|
| 登录 | 继续启动服务(使用本地已保存配置) |
| 启动全部 | 继续启动服务(使用本地已保存配置) |
| 手动启动单个 | 不调用 reg,直接启动 |
| 自动重连 | 显示 notification,使用本地配置尝试启动 |
设计原则:reg 失败不应阻止服务启动,允许用户在离线环境下使用。
相关文档
- review-reg-and-autoreconnect.md - 历史代码审查记录
最后更新:2026-03-19