From cf2896324e60e2dc3890c658378499383100e79c Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Tue, 27 May 2025 16:45:06 +0200 Subject: Big progress with web version --- web/http/index.html | 8 +++---- web/http/nissyapp.mjs | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++ web/http/solve.mjs | 33 --------------------------- web/http/worker.mjs | 27 ---------------------- 4 files changed, 66 insertions(+), 64 deletions(-) create mode 100644 web/http/nissyapp.mjs delete mode 100644 web/http/solve.mjs delete mode 100644 web/http/worker.mjs (limited to 'web/http') diff --git a/web/http/index.html b/web/http/index.html index 245205d..c80f7ec 100644 --- a/web/http/index.html +++ b/web/http/index.html @@ -4,7 +4,7 @@ Nissy - H48 solver POC - + @@ -13,8 +13,8 @@ - -

Solution:

-

+ +

+

diff --git a/web/http/nissyapp.mjs b/web/http/nissyapp.mjs new file mode 100644 index 0000000..23e74d0 --- /dev/null +++ b/web/http/nissyapp.mjs @@ -0,0 +1,62 @@ +// Run ./build web from the main folder before running this example. +// The necessary modules (including worker.mjs) will be built and / or moved +// to this folder when running ./build web. + +var solveButton = document.getElementById("solveButton"); +var scrField = document.getElementById("scrambleText"); +var resultsLabel = document.getElementById("resultsLabel"); +var resultsText = document.getElementById("results"); +var solverSelector = document.getElementById("solverSelector"); + +var lastCallbackId = 0; +var callbacks = new Map(); // Values: { f: function, arg: object } +var worker = new Worker("./worker.mjs", { type: "module" }); +worker.onmessage = (event) => { + if (event.data.command == "log") { + console.log(event.data.object); // TODO + } else if (!callbacks.has(event.data.id)) { + console.log("[nissy app] Unknown callback " + event.data.id + + " for command " + event.data.command); + } else { + var callback = callbacks.get(event.data.id); + callback.f(callback.arg, event.data.arg); + } +}; + +function updateResults(label, results, buttonState) { + resultsLabel.innerText = label; + resultsText.innerText = results; + solveButton.disable = !buttonState; +} + +solveButton.addEventListener("click", () => { + updateResults("Loading solutions...", "", false); + const callbackId = ++lastCallbackId; + callbacks.set(callbackId, { + f: (callbackArg, solveResult) => { + if (solveResult.success) { + const n = solveResult.solutions.length; + const label = n == 0 ? "No solution found" : + ("Found " + n + " solution" + (n == 1 ? "" : "s")) + ":"; + const text = solveResult.solutions.join("\n"); + updateResults(label, text, true); + } else { + updateResults("Unexpected error while solving!", "", true); + } + }, + arg: "" // Currently unused + }); + worker.postMessage({ + command: "solve", + id: callbackId, + arg: { + solver: solverSelector.options[solverSelector.selectedIndex].value, + scramble: scrField.value, + minmoves: 0, + maxmoves: 20, + maxsolutions: 1, + optimal: 20, + threads: window.navigator.hardwareConcurrency, + } + }); +}); diff --git a/web/http/solve.mjs b/web/http/solve.mjs deleted file mode 100644 index 127e1e3..0000000 --- a/web/http/solve.mjs +++ /dev/null @@ -1,33 +0,0 @@ -var solveButton = document.getElementById("solveButton"); -var scrField = document.getElementById("scrambleText"); -var solutionText = document.getElementById("solution"); -var solverSelector = document.getElementById("solverSelector"); - -var worker = new Worker("./worker.mjs", { type: "module" }); -worker.onmessage = (e) => { - updateResults(e.data); - enableSolveButton(); -}; - -function updateResults(s) { - solutionText.innerText = s; -} - -function disableSolveButton() { - solveButton.disabled = true; - solveButton.innerText = "Solving..."; -} - -function enableSolveButton() { - solveButton.disabled = false; - solveButton.innerText = "Solve!"; -} - -solveButton.addEventListener("click", () => { - disableSolveButton(); - updateResults("Loading solutions..."); - worker.postMessage({ - solver: solverSelector.options[solverSelector.selectedIndex].value, - scramble: scrField.value - }); -}); diff --git a/web/http/worker.mjs b/web/http/worker.mjs deleted file mode 100644 index 7ce1070..0000000 --- a/web/http/worker.mjs +++ /dev/null @@ -1,27 +0,0 @@ -import Nissy from "./nissy_web_module.mjs" - -const nissy = await Nissy(); -nissy.setLogger(nissy._addCallbackFunction(console.log)); - -onmessage = (e) => { -//TODO: try to load from storage first, then download - nissy.initSolverDownload(e.data.solver, "/tables").then( - (download_result) => { - if (!download_result) { - postMessage("Error retrieving the solver data"); - } else { - var cube = new nissy.Cube(); - cube.move(e.data.scramble); - - nissy.solve(e.data.solver, cube, nissy.NissFlag.normal, - 0, 17, 1, 99, 4, -1).then( - (solve_result) => { - if (!solve_result.err.ok()) - postMessage("Error while solving (solve returned " + - solve_result.err.value + ")"); - else - postMessage(solve_result.solutions) - }); - } - }); -}; -- cgit v1.3