/** * 假引擎:模拟「长时间运行 + 能被叫停」,**完全不碰 TikTok**。 * * 用途:验证界面侧的运行态交互(状态条、进度、两步停止)。 * 用真引擎验证这些时,它会把 TikTok 拉到前台,我就没法同时操作界面上的按钮了 —— * 而这个假引擎不切应用,界面始终留在前台,正好把 UI 交互测干净。 * * 协议与真引擎完全一致:读 --config/--state/--stop-flag/--run-id,写 run-state.json。 */ function argOf(argv, key) { for (var i = 0; argv && argv[i] !== undefined; i += 1) { if (String(argv[i]) === key) { return String(argv[i + 1]); } } return ""; } var argv = engines.myEngine().execArgv; var STATE = argOf(argv, "--state"); var STOP = argOf(argv, "--stop-flag"); var RUN_ID = argOf(argv, "--run-id"); function report(payload) { payload.runId = RUN_ID; payload.updatedAt = Date.now(); files.write(STATE, JSON.stringify(payload)); } report({ status: "running", phase: "假引擎运行中", done: 0, total: 3 }); var began = Date.now(); var tick = 0; var done = 0; while (Date.now() - began < 60000) { tick += 1; /* 每 3 秒推进一格进度:用来验证状态条会跟着引擎上报刷新 */ if (tick % 10 === 0 && done < 3) { done += 1; report({ status: "running", phase: "已处理 " + done + "/3", done: done, total: 3 }); } var content = ""; try { if (files.exists(STOP)) { content = String(files.read(STOP)).replace(/\s/g, ""); } } catch (e) { } if (content !== "" && content === RUN_ID) { report({ status: "stopped", phase: "", message: "已停止(假引擎)" }); exit(); } sleep(300); } report({ status: "finished", phase: "", done: 3, total: 3, message: "跑完了(假引擎)" });