UNPKG

cod-dicomweb-server

Version:

A wadors server proxy that get data from a Cloud Optimized Dicom format.

56 lines (55 loc) 1.92 kB
import { wrap } from 'comlink'; import { CustomError } from '../classes/customClasses'; class WebWorkerManager { workerRegistry = {}; register(name, workerFn) { try { const worker = workerFn(); if (!worker) { throw new CustomError(`WorkerFn of worker ${name} is not creating a worker`); } this.workerRegistry[name] = { instance: wrap(worker), nativeWorker: worker }; } catch (error) { console.warn(error); } } async executeTask(workerName, taskName, options) { const worker = this.workerRegistry[workerName]?.instance; if (!worker) { throw new CustomError(`Worker ${workerName} not registered`); } try { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore return await worker[taskName](options); } catch (error) { console.error(`Error executing task "${taskName}" on worker "${workerName}":`, error); throw new CustomError(`Task "${taskName}" failed: ${error.message}`); } } addEventListener(workerName, eventType, listener) { const worker = this.workerRegistry[workerName]; if (!worker) { console.error(`Worker type '${workerName}' is not registered.`); return; } worker.nativeWorker.addEventListener(eventType, listener); } removeEventListener(workerName, eventType, listener) { const worker = this.workerRegistry[workerName]; if (!worker) { console.error(`Worker type '${workerName}' is not registered.`); return; } worker.nativeWorker.removeEventListener(eventType, listener); } reset() { this.workerRegistry = {}; } } export default WebWorkerManager;