mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-16 13:03:31 +08:00
H5 远程访问的三处不稳定来源修复,让手机出门在外也能稳定连接、长任务不丢。 #767 令牌与端口固定: - 令牌明文持久化到 cc-haha/settings.json,重启后二维码/令牌随时可查、可复制; enable 复用现有令牌、disable 保留令牌,仅 regenerate 才轮换。手改 token 字段 即自定义固定令牌。完整令牌只经 local-trusted 面返回,远端 403。 - 新增可选固定端口 fixedPort,并在未配置时复用上次端口(desktop-server-state.json sticky,Electron/Tauri 双壳共享),反向代理/手机书签跨重启不失效;占用时回退随机。 #764 断连不杀正在运行的 CLI: - 客户端断开时若该会话仍在跑一轮任务,不再 30s 后强杀子进程,而是等任务跑完; 手机锁屏/切后台时长任务在后台跑完,重连即见结果。 - 空闲清理超时改为可配 disconnectGraceSeconds(H5 访问设置页,默认 30s), 经 disconnectGraceConfig 同步缓存供 close 处理读取。 server / Electron / Tauri / React 四层 + 五语言 i18n + 配套单测全部覆盖。
38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
/**
|
|
* Cached disconnect grace period (issue #764).
|
|
*
|
|
* The WebSocket `close` handler runs synchronously, but the configured grace
|
|
* period lives in managed settings (async disk read). We cache the resolved
|
|
* value here so the hot path stays synchronous, and refresh the cache at
|
|
* server startup and whenever the H5 access settings are updated.
|
|
*/
|
|
import { H5AccessService, DEFAULT_DISCONNECT_GRACE_MS } from '../services/h5AccessService.js'
|
|
|
|
let cachedGraceMs = DEFAULT_DISCONNECT_GRACE_MS
|
|
const h5AccessService = new H5AccessService()
|
|
|
|
/** Synchronous accessor for the disconnect cleanup grace period, in ms. */
|
|
export function getDisconnectGraceMs(): number {
|
|
return cachedGraceMs
|
|
}
|
|
|
|
/** Reload the cached grace period from managed settings. Best-effort. */
|
|
export async function refreshDisconnectGraceMs(): Promise<number> {
|
|
try {
|
|
cachedGraceMs = await h5AccessService.getDisconnectGraceMs()
|
|
} catch {
|
|
// Keep the previous (or default) value on read failure.
|
|
}
|
|
return cachedGraceMs
|
|
}
|
|
|
|
/** Test hook: override the cached value directly. */
|
|
export function __setDisconnectGraceMsForTests(value: number): void {
|
|
cachedGraceMs = value
|
|
}
|
|
|
|
/** Test hook: reset to the built-in default. */
|
|
export function __resetDisconnectGraceMsForTests(): void {
|
|
cachedGraceMs = DEFAULT_DISCONNECT_GRACE_MS
|
|
}
|