refactor: add more sanity checks to charging profiles handling code
[e-mobility-charging-stations-simulator.git] / src / worker / WorkerSet.ts
index 19ed8393f171a64d37e4e3d3e871cacf81f17539..fd81840a7a35139e238ff203facef400576e6572 100644 (file)
@@ -10,6 +10,7 @@ import { WorkerConstants } from './WorkerConstants';
 import {
   type SetInfo,
   type WorkerData,
+  type WorkerMessage,
   WorkerMessageEvents,
   type WorkerOptions,
   type WorkerSetElement,
@@ -76,15 +77,15 @@ export class WorkerSet extends WorkerAbstract<WorkerData> {
   /** @inheritDoc */
   public async stop(): Promise<void> {
     for (const workerSetElement of this.workerSet) {
-      const workerExitPromise = new Promise<void>((resolve) => {
-        workerSetElement.worker.on('exit', () => {
+      const worker = workerSetElement.worker;
+      const waitWorkerExit = new Promise<void>((resolve) => {
+        worker.on('exit', () => {
           resolve();
         });
       });
-      await workerSetElement.worker.terminate();
-      await workerExitPromise;
+      await worker.terminate();
+      await waitWorkerExit;
     }
-    this.workerSet.clear();
   }
 
   /** @inheritDoc */
@@ -116,6 +117,13 @@ export class WorkerSet extends WorkerAbstract<WorkerData> {
       'message',
       this.workerOptions.poolOptions?.messageHandler ?? WorkerConstants.EMPTY_FUNCTION,
     );
+    worker.on('message', (message: WorkerMessage<WorkerData>) => {
+      if (message.event === WorkerMessageEvents.startedWorkerElement) {
+        this.emitter?.emit(WorkerSetEvents.elementStarted, this.info);
+      } else if (message.event === WorkerMessageEvents.startWorkerElementError) {
+        this.emitter?.emit(WorkerSetEvents.elementError, message.data);
+      }
+    });
     worker.on(
       'error',
       this.workerOptions.poolOptions?.errorHandler ?? WorkerConstants.EMPTY_FUNCTION,