X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fworker%2FWorkerSet.ts;h=1774c24a4f17585e8ce1c6dd4bbcef1c109a5fee;hb=626d3ce5e6dfdc848cb2bb5833044fe6fbe68324;hp=7636a167a5548993b68f6a17791f22dc33bfbd5d;hpb=65d2250205186eaab80febce407d1f7fdf830473;p=e-mobility-charging-stations-simulator.git diff --git a/src/worker/WorkerSet.ts b/src/worker/WorkerSet.ts index 7636a167..1774c24a 100644 --- a/src/worker/WorkerSet.ts +++ b/src/worker/WorkerSet.ts @@ -130,7 +130,11 @@ export class WorkerSet extends Worke data: elementData } satisfies WorkerMessage workerSetElement.worker.postMessage(message) - this.promiseResponseMap.set(message.uuid, { resolve, reject, workerSetElement }) + this.promiseResponseMap.set(message.uuid, { + resolve, + reject, + workerSetElement + }) }) const response = await sendMessageToWorker // Add element sequentially to optimize memory at startup @@ -153,22 +157,36 @@ export class WorkerSet extends Worke }) worker.on('message', this.workerOptions.poolOptions?.messageHandler ?? EMPTY_FUNCTION) worker.on('message', (message: WorkerMessage) => { - if (this.promiseResponseMap.has(message.uuid)) { + const { uuid, event, data } = message + if (this.promiseResponseMap.has(uuid)) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const { resolve, reject, workerSetElement } = this.promiseResponseMap.get(message.uuid)! - if (message.event === WorkerMessageEvents.addedWorkerElement) { - this.emitter?.emit(WorkerSetEvents.elementAdded, this.info) - workerSetElement.numberOfWorkerElements++ - resolve(message.data) - } else if (message.event === WorkerMessageEvents.workerElementError) { - this.emitter?.emit(WorkerSetEvents.elementError, message.data) - reject(message.data) + const { resolve, reject, workerSetElement } = this.promiseResponseMap.get(uuid)! + switch (event) { + case WorkerMessageEvents.addedWorkerElement: + this.emitter?.emit(WorkerSetEvents.elementAdded, this.info) + ++workerSetElement.numberOfWorkerElements + resolve(data) + break + case WorkerMessageEvents.workerElementError: + this.emitter?.emit(WorkerSetEvents.elementError, data) + reject(data) + break + default: + reject( + new Error( + `Unknown worker message event: '${event}' received with data: '${JSON.stringify( + data, + undefined, + 2 + )}'` + ) + ) } - this.promiseResponseMap.delete(message.uuid) + this.promiseResponseMap.delete(uuid) } }) worker.on('error', this.workerOptions.poolOptions?.errorHandler ?? EMPTY_FUNCTION) - worker.on('error', error => { + worker.once('error', error => { this.emitter?.emit(WorkerSetEvents.error, error) if ( this.workerOptions.poolOptions?.restartWorkerOnError === true && @@ -185,7 +203,10 @@ export class WorkerSet extends Worke worker.once('exit', () => { this.removeWorkerSetElement(this.getWorkerSetElementByWorker(worker)) }) - const workerSetElement: WorkerSetElement = { worker, numberOfWorkerElements: 0 } + const workerSetElement: WorkerSetElement = { + worker, + numberOfWorkerElements: 0 + } this.workerSet.add(workerSetElement) this.workerStartup = false return workerSetElement