23 lines
1.4 KiB
TypeScript
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 } });
|
|
});
|