dyomedea/src/workers/dispatcher-worker.ts

115 lines
2.6 KiB
TypeScript
Raw Normal View History

/// <reference lib="webworker" />
import { initDb } from '../db';
2022-12-25 15:30:47 +00:00
import { getAccounts, putAccount } from '../db/account';
2022-12-06 13:36:50 +00:00
import { cancelWatch, getAndWatch } from '../db/change-handler';
import {
putNewGpx,
existsGpx,
pruneAndSaveImportedGpx,
getGpx,
2022-12-12 17:55:14 +00:00
putGpx,
2022-12-13 19:59:39 +00:00
appendTrk,
2022-11-27 13:32:21 +00:00
getAllGpxes,
getAllGpxesWithSummary,
} from '../db/gpx';
import { putRte } from '../db/rte';
import { putRtept } from '../db/rtept';
2022-12-25 15:30:47 +00:00
import { getSettings, putSettings } from '../db/settings';
import { getState, setState } from '../db/state';
import { deleteTrk, getTrk, putNewTrk } from '../db/trk';
2023-01-07 17:46:14 +00:00
import { putTrkpt } from '../db/trkpt';
2022-12-13 19:59:39 +00:00
import { getTrkseg, appendTrkpt } from '../db/trkseg';
2022-12-06 20:27:25 +00:00
import { getWpt, putWpt } from '../db/wpt';
import { until } from '../lib/async-wait';
2022-11-27 13:32:21 +00:00
//const self = globalThis as unknown as WorkerGlobalScope;
2022-12-06 13:36:50 +00:00
console.log({ caller: 'dispatcher-worker' });
declare global {
var dbReady: boolean;
}
globalThis.dbReady = false;
onmessage = async function (e) {
2022-12-06 13:36:50 +00:00
const actions = {
initDb,
putNewGpx,
putNewTrk,
existsGpx,
pruneAndSaveImportedGpx,
getAllGpxes,
getAllGpxesWithSummary,
2022-12-06 13:36:50 +00:00
getGpx,
2022-12-12 17:55:14 +00:00
putGpx,
2022-12-13 19:59:39 +00:00
appendTrk,
2022-12-06 13:36:50 +00:00
getTrk,
getTrkseg,
2022-12-13 19:59:39 +00:00
appendTrkpt,
2022-12-06 13:36:50 +00:00
getWpt,
2022-12-06 20:27:25 +00:00
putWpt,
putRte,
putRtept,
2023-01-07 17:46:14 +00:00
putTrkpt,
deleteTrk,
getState,
setState,
2022-12-06 20:27:25 +00:00
2022-12-06 13:36:50 +00:00
getAndWatch,
cancelWatch,
2022-12-25 15:30:47 +00:00
getSettings,
putSettings,
getAccounts,
putAccount,
2022-12-06 13:36:50 +00:00
};
console.log({ caller: 'dispatcher-worker / onmessage', e });
const { id, payload } = e.data;
var returnValue: any = 'unknownAction';
if (payload.action in actions) {
console.log({
caller: 'dispatcher-worker / awaiting',
id,
payload,
dbReady: globalThis.dbReady,
});
if (payload.action !== 'initDb' && !globalThis.dbReady) {
console.log({
caller: 'dispatcher-worker / waiting for dbReady',
id,
dbReady: globalThis.dbReady,
});
await until(() => globalThis.dbReady, 10);
console.log({
caller: 'dispatcher-worker / dbReady',
id,
dbReady: globalThis.dbReady,
});
}
2022-12-06 13:36:50 +00:00
returnValue = await actions[<keyof typeof actions>payload.action]({
...payload.params,
_dispatchId: id,
});
}
postMessage({ id: id, payload: returnValue });
console.log({
caller: 'dispatcher-worker / response sent',
id,
returnValue,
dbReady: globalThis.dbReady,
});
};
2022-12-06 13:36:50 +00:00
export const returnAgain = (id: number, returnValue: any) => {
console.log({ caller: 'dispatcher-worker / returnAgain', id, returnValue });
postMessage({ id: id, payload: returnValue });
};
//export default self;