Files
linuxcncWebWASM/web/react/src/sim-worker-entry.ts

23 lines
1.4 KiB
TypeScript

import createModule from "../../../build-wasm/linuxcnc-sim-core.js";
import { XyzacSession as SimSession } from "../../worker/xyzac-session.mjs";
// The boot event is a transport diagnostic; it carries no simulation state.
self.postMessage({ schema_version: 1, kind: "WORKER_BOOT", context_id: "linuxcnc-2.10.0-pre0-wasm-m1-py-c1", session_id: "boot", seq: 0, payload: { status: "booting", runtime: "react-vite-worker" } });
let session: SimSession | null = null;
const queue: MessageEvent[] = [];
const handle = (event: MessageEvent) => {
try {
if (!session) { queue.push(event); return; }
self.postMessage(session.accept(event.data));
} catch (error) {
self.postMessage({ schema_version: 1, kind: "ERROR", context_id: session?.contextId ?? "linuxcnc-2.10.0-pre0-wasm-m1-py-c1", session_id: session?.sessionId ?? "boot", seq: event.data?.seq ?? 0, payload: { status: "error", code: "worker_exception", message_key: error instanceof Error ? error.message : String(error), retryable: false } });
}
};
self.onmessage = handle;
createModule().then((core) => {
session = new SimSession(core);
for (const event of queue.splice(0)) handle(event);
}).catch((error) => {
self.postMessage({ schema_version: 1, kind: "ERROR", context_id: "linuxcnc-2.10.0-pre0-wasm-m1-py-c1", session_id: "boot", seq: 0, payload: { status: "error", code: "worker_wasm_init", message_key: error instanceof Error ? error.message : String(error), retryable: false } });
});