| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /**
- * 假引擎:模拟「长时间运行 + 能被叫停」,**完全不碰 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: "跑完了(假引擎)" });
|