All checks were successful
Deploy to Production / deploy (push) Successful in 6s
59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
import { DeepCube } from "../utils/DeepCube.js";
|
|
import { KociembaSolver } from "../utils/solvers/KociembaSolver.js";
|
|
import { BeginnerSolver } from "../utils/solvers/BeginnerSolver.js";
|
|
|
|
let isKociembaReady = false;
|
|
|
|
// Defer heavy initialization to allow the worker to be responsive initially
|
|
setTimeout(() => {
|
|
console.log("[SolverWorker] Kociemba solver initialization");
|
|
console.time("[SolverWorker] Kociemba solver initialized");
|
|
KociembaSolver.init();
|
|
console.timeEnd("[SolverWorker] Kociemba solver initialized");
|
|
isKociembaReady = true;
|
|
postMessage({ type: "INIT_DONE" });
|
|
}, 50);
|
|
|
|
self.onmessage = (e) => {
|
|
const { type, payload } = e.data;
|
|
|
|
if (type === "SOLVE") {
|
|
const { solverType, cubeState } = payload;
|
|
|
|
if (solverType === "kociemba" && !isKociembaReady) {
|
|
postMessage({ type: "SOLVE_ERROR", payload: "wait for initialize solver" });
|
|
return;
|
|
}
|
|
|
|
try {
|
|
// Reconstruct DeepCube state from payload
|
|
const dc = new DeepCube(
|
|
new Int8Array(cubeState.cp),
|
|
new Int8Array(cubeState.co),
|
|
new Int8Array(cubeState.ep),
|
|
new Int8Array(cubeState.eo)
|
|
);
|
|
|
|
let solution = [];
|
|
if (solverType === "kociemba") {
|
|
const solver = new KociembaSolver(dc);
|
|
solution = solver.solve();
|
|
} else if (solverType === "beginner") {
|
|
const solver = new BeginnerSolver(dc);
|
|
solution = solver.solve();
|
|
} else {
|
|
throw new Error(`Unknown solver type: ${solverType}`);
|
|
}
|
|
|
|
postMessage({
|
|
type: "SOLVE_RESULT",
|
|
payload: solution,
|
|
});
|
|
} catch (err) {
|
|
console.error("[SolverWorker] Solve error:", err);
|
|
postMessage({ type: "SOLVE_ERROR", payload: err.message });
|
|
postMessage({ type: "SOLVE_RESULT", payload: [] });
|
|
}
|
|
}
|
|
};
|