From 78c4050166bb53bc2ea953a2c50bdd4aef1792f4 Mon Sep 17 00:00:00 2001 From: Martin Asprusten Date: Sat, 29 Aug 2026 14:14:36 +0200 Subject: [PATCH] Change messaginging, allow adding more message types later --- src/main.ts | 22 ++++++++++++------- src/worker/messages.ts | 12 ++++++++++- src/worker/worker.ts | 48 ++++++++++++++++++++++++------------------ 3 files changed, 52 insertions(+), 30 deletions(-) diff --git a/src/main.ts b/src/main.ts index 07c40db..6a74c7e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,7 +7,7 @@ import { createUrl, parseUrl } from './url/UrlHandler.js'; import { wktToGeoJSON } from '@terraformer/wkt'; import PPENHandler from './files/ppenhandler.js'; import type { GeoJsonObject } from 'geojson'; -import type { SearchStatusMessage, StartSearchMessage } from './worker/messages.js'; +import type { FromWorkerMessage, ToWorkerMessage } from './worker/messages.js'; // Outside influences let mapHandler = new MapHandler(); @@ -286,10 +286,13 @@ function updateState() { // In case of messages from the web worker, do work worker.onmessage = e => { - let message = e.data as SearchStatusMessage; - state.foundPath = message.path; - state.calculating = false; - updateState(); + let fromWorker = e.data as FromWorkerMessage; + let message = fromWorker.message; + if (message.type == 'SearchFinished') { + state.foundPath = message.path; + state.calculating = false; + updateState(); + } } function calculateRoute(): void { @@ -326,9 +329,12 @@ function calculateRoute(): void { weights.push(weightsRow); } - let startSearchMessage: StartSearchMessage = { - weights: weights - }; + let startSearchMessage: ToWorkerMessage = { + message: { + type: "StartSearch", + weights: weights + } + } worker.postMessage(startSearchMessage); } diff --git a/src/worker/messages.ts b/src/worker/messages.ts index 848aa3b..791bb47 100644 --- a/src/worker/messages.ts +++ b/src/worker/messages.ts @@ -1,7 +1,17 @@ export interface StartSearchMessage { + type: 'StartSearch' weights: number[][]; } -export interface SearchStatusMessage { +export interface SearchFinishedMessage { + type: 'SearchFinished' path: number[]; +} + +export interface ToWorkerMessage { + message: StartSearchMessage +} + +export interface FromWorkerMessage { + message: SearchFinishedMessage } \ No newline at end of file diff --git a/src/worker/worker.ts b/src/worker/worker.ts index d2aa629..1582dcc 100644 --- a/src/worker/worker.ts +++ b/src/worker/worker.ts @@ -1,32 +1,38 @@ import Module, { type MainModule } from '../../native/salesman.js'; -import type { SearchStatusMessage, StartSearchMessage } from "./messages" +import type { FromWorkerMessage, ToWorkerMessage } from "./messages" let modulePromise: Promise = Module(); onmessage = async (e) => { let module = await modulePromise; - let message = e.data as StartSearchMessage; - let nativeWeights = new module.Weights; - message.weights.forEach(weightsRow => { - let nativeWeightsRow = new module.WeightsRow(); - weightsRow.forEach(weight => { - nativeWeightsRow.push_back(weight); + let toWorker = e.data as ToWorkerMessage; + if (toWorker.message.type == 'StartSearch') { + let message = toWorker.message; + let nativeWeights = new module.Weights; + message.weights.forEach(weightsRow => { + let nativeWeightsRow = new module.WeightsRow(); + weightsRow.forEach(weight => { + nativeWeightsRow.push_back(weight); + }); + nativeWeights.push_back(nativeWeightsRow); }); - nativeWeights.push_back(nativeWeightsRow); - }); - let path = module.findShortestPath(nativeWeights); + let path = module.findShortestPath(nativeWeights); - let foundPath = []; - for (var i = 0; i < path.size(); i++) { - let pointIndex = path.get(i); - if (typeof pointIndex != 'undefined') { - foundPath.push(pointIndex); - } - }; + let foundPath = []; + for (var i = 0; i < path.size(); i++) { + let pointIndex = path.get(i); + if (typeof pointIndex != 'undefined') { + foundPath.push(pointIndex); + } + }; - let finishedMessage: SearchStatusMessage = { - path: foundPath - }; - postMessage(finishedMessage); + let finishedMessage: FromWorkerMessage = { + message: { + type: 'SearchFinished', + path: foundPath + } + }; + postMessage(finishedMessage); + } } \ No newline at end of file