diff --git a/web/database/worker/db-worker.js b/web/database/worker/db-worker.js --- a/web/database/worker/db-worker.js +++ b/web/database/worker/db-worker.js @@ -2,7 +2,13 @@ import localforage from 'localforage'; -import { type SharedWorkerMessageEvent } from '../../types/worker-types.js'; +import { + type SharedWorkerMessageEvent, + type WorkerRequestMessage, + type WorkerResponseMessage, + workerRequestMessageTypes, + workerResponseMessageTypes, +} from '../../types/worker-types.js'; const localforageConfig: PartialConfig = { driver: localforage.INDEXEDDB, @@ -13,6 +19,19 @@ }; localforage.config(localforageConfig); +function processAppRequest( + message: WorkerRequestMessage, +): ?WorkerResponseMessage { + if (message.type === workerRequestMessageTypes.PING) { + return { + type: workerResponseMessageTypes.PONG, + text: 'PONG', + }; + } + + throw new Error('Request type not supported'); +} + function connectHandler(event: SharedWorkerMessageEvent) { if (!event.ports.length) { return; @@ -21,9 +40,16 @@ console.log('Web database worker alive!'); port.onmessage = async function (messageEvent: MessageEvent) { - console.log('message from main thread: ', messageEvent.data); + const message: WorkerRequestMessage = (messageEvent.data: any); - port.postMessage({ message: 'response from worker' }); + try { + const result = processAppRequest(message); + port.postMessage(result); + } catch (e) { + port.postMessage({ + error: e, + }); + } }; } diff --git a/web/types/worker-types.js b/web/types/worker-types.js --- a/web/types/worker-types.js +++ b/web/types/worker-types.js @@ -1,5 +1,35 @@ // @flow +// The types of messages sent from app to worker +export const workerRequestMessageTypes = Object.freeze({ + PING: 0, +}); + +export type PingWorkerRequestMessage = { + +type: 0, + +text: string, +}; + +export type WorkerRequestMessage = PingWorkerRequestMessage; + +// The types of messages sent from worker to app +export const workerResponseMessageTypes = Object.freeze({ + PONG: 0, +}); + +export type ErrorWorkerResponseMessage = { + +error: Error, +}; +export type PongWorkerResponseMessage = { + +type: 0, + +text: string, +}; + +export type WorkerResponseMessage = + | PongWorkerResponseMessage + | ErrorWorkerResponseMessage; + +// SharedWorker types export type SharedWorkerMessageEvent = MessageEvent & { +ports: $ReadOnlyArray, ...