Change messaginging, allow adding more message types later

This commit is contained in:
Martin Asprusten
2026-08-29 14:14:36 +02:00
parent f3a1f058c0
commit 78c4050166
3 changed files with 52 additions and 30 deletions
+10 -4
View File
@@ -7,7 +7,7 @@ import { createUrl, parseUrl } from './url/UrlHandler.js';
import { wktToGeoJSON } from '@terraformer/wkt'; import { wktToGeoJSON } from '@terraformer/wkt';
import PPENHandler from './files/ppenhandler.js'; import PPENHandler from './files/ppenhandler.js';
import type { GeoJsonObject } from 'geojson'; import type { GeoJsonObject } from 'geojson';
import type { SearchStatusMessage, StartSearchMessage } from './worker/messages.js'; import type { FromWorkerMessage, ToWorkerMessage } from './worker/messages.js';
// Outside influences // Outside influences
let mapHandler = new MapHandler(); let mapHandler = new MapHandler();
@@ -286,10 +286,13 @@ function updateState() {
// In case of messages from the web worker, do work // In case of messages from the web worker, do work
worker.onmessage = e => { worker.onmessage = e => {
let message = e.data as SearchStatusMessage; let fromWorker = e.data as FromWorkerMessage;
let message = fromWorker.message;
if (message.type == 'SearchFinished') {
state.foundPath = message.path; state.foundPath = message.path;
state.calculating = false; state.calculating = false;
updateState(); updateState();
}
} }
function calculateRoute(): void { function calculateRoute(): void {
@@ -326,9 +329,12 @@ function calculateRoute(): void {
weights.push(weightsRow); weights.push(weightsRow);
} }
let startSearchMessage: StartSearchMessage = { let startSearchMessage: ToWorkerMessage = {
message: {
type: "StartSearch",
weights: weights weights: weights
}; }
}
worker.postMessage(startSearchMessage); worker.postMessage(startSearchMessage);
} }
+11 -1
View File
@@ -1,7 +1,17 @@
export interface StartSearchMessage { export interface StartSearchMessage {
type: 'StartSearch'
weights: number[][]; weights: number[][];
} }
export interface SearchStatusMessage { export interface SearchFinishedMessage {
type: 'SearchFinished'
path: number[]; path: number[];
} }
export interface ToWorkerMessage {
message: StartSearchMessage
}
export interface FromWorkerMessage {
message: SearchFinishedMessage
}
+9 -3
View File
@@ -1,11 +1,13 @@
import Module, { type MainModule } from '../../native/salesman.js'; import Module, { type MainModule } from '../../native/salesman.js';
import type { SearchStatusMessage, StartSearchMessage } from "./messages" import type { FromWorkerMessage, ToWorkerMessage } from "./messages"
let modulePromise: Promise<MainModule> = Module(); let modulePromise: Promise<MainModule> = Module();
onmessage = async (e) => { onmessage = async (e) => {
let module = await modulePromise; let module = await modulePromise;
let message = e.data as StartSearchMessage; let toWorker = e.data as ToWorkerMessage;
if (toWorker.message.type == 'StartSearch') {
let message = toWorker.message;
let nativeWeights = new module.Weights; let nativeWeights = new module.Weights;
message.weights.forEach(weightsRow => { message.weights.forEach(weightsRow => {
let nativeWeightsRow = new module.WeightsRow(); let nativeWeightsRow = new module.WeightsRow();
@@ -25,8 +27,12 @@ onmessage = async (e) => {
} }
}; };
let finishedMessage: SearchStatusMessage = { let finishedMessage: FromWorkerMessage = {
message: {
type: 'SearchFinished',
path: foundPath path: foundPath
}
}; };
postMessage(finishedMessage); postMessage(finishedMessage);
}
} }