cod-dicomweb-server
Version:
A wadors server proxy that get data from a Cloud Optimized Dicom format.
66 lines (65 loc) • 2.45 kB
JavaScript
import { CustomError } from '../classes/customClasses';
class RequestManager {
loaderRegistry = {};
register(loaderName, loaderObject) {
try {
if (!loaderObject) {
throw new CustomError(`Loader object for ${loaderName} is not provided`);
}
this.loaderRegistry[loaderName] = {
loaderObject,
listeners: {}
};
}
catch (error) {
console.warn(error);
throw new CustomError('throws');
}
}
listenerCallback = (loaderName, taskName, args) => {
const listeners = this.loaderRegistry[loaderName]?.listeners[taskName];
if (listeners) {
listeners.forEach((listener) => listener({ data: args }));
}
};
async executeTask(loaderName, taskName, options) {
const loaderObject = this.loaderRegistry[loaderName]?.loaderObject;
if (!loaderObject) {
throw new CustomError(`Loader ${loaderName} not registered`);
}
try {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
return await loaderObject[taskName](options, (args) => this.listenerCallback(loaderName, 'message', args));
}
catch (error) {
console.error(`Error executing task "${taskName}" on "${loaderName}":`, error);
throw new CustomError(`Task "${taskName}" failed: ${error.message}`);
}
}
addEventListener(workerName, eventType, listener) {
const loaderObject = this.loaderRegistry[workerName];
if (!loaderObject) {
console.error(`Loader '${workerName}' is not registered.`);
return;
}
if (!loaderObject.listeners[eventType]) {
loaderObject.listeners[eventType] = [listener];
}
else {
loaderObject.listeners[eventType].push(listener);
}
}
removeEventListener(workerName, eventType, listener) {
const loaderObject = this.loaderRegistry[workerName];
if (!loaderObject) {
console.error(`Loader '${workerName}' is not registered.`);
return;
}
loaderObject.listeners[eventType] = (loaderObject.listeners[eventType] || []).filter((existingListener) => existingListener !== listener);
}
reset() {
this.loaderRegistry = {};
}
}
export default RequestManager;