]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
refactor: factor out worket set event emission
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 22 Aug 2025 11:01:01 +0000 (13:01 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 22 Aug 2025 11:01:01 +0000 (13:01 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
src/worker/WorkerSet.ts

index 50db75590bc9294fcd0522c7c07e6ce116883778..e47e0ed6ab6229114074c2c2155fed2403d1985e 100644 (file)
@@ -122,9 +122,7 @@ export class WorkerSet<D extends WorkerData, R extends WorkerData> extends Worke
       await sleep(randomizeDelay(this.workerOptions.workerStartDelay))
     }
     this.started = true
-    if (this.emitter != null && this.emitter.listenerCount(WorkerSetEvents.started) > 0) {
-      this.emitter.emit(WorkerSetEvents.started, this.info)
-    }
+    this.safeEmit(WorkerSetEvents.started, this.info)
   }
 
   /** @inheritDoc */
@@ -179,22 +177,12 @@ export class WorkerSet<D extends WorkerData, R extends WorkerData> extends Worke
         const { reject, resolve, workerSetElement } = this.promiseResponseMap.get(uuid)!
         switch (event) {
           case WorkerMessageEvents.addedWorkerElement:
-            if (
-              this.emitter != null &&
-              this.emitter.listenerCount(WorkerSetEvents.elementAdded) > 0
-            ) {
-              this.emitter.emit(WorkerSetEvents.elementAdded, this.info)
-            }
+            this.safeEmit(WorkerSetEvents.elementAdded, this.info)
             ++workerSetElement.numberOfWorkerElements
             resolve(data)
             break
           case WorkerMessageEvents.workerElementError:
-            if (
-              this.emitter != null &&
-              this.emitter.listenerCount(WorkerSetEvents.elementError) > 0
-            ) {
-              this.emitter.emit(WorkerSetEvents.elementError, data)
-            }
+            this.safeEmit(WorkerSetEvents.elementError, data)
             reject(data)
             break
           default:
@@ -205,27 +193,21 @@ export class WorkerSet<D extends WorkerData, R extends WorkerData> extends Worke
                 2
               )}'`
             )
-            if (this.emitter != null && this.emitter.listenerCount(WorkerSetEvents.error) > 0) {
-              this.emitter.emit(WorkerSetEvents.error, error)
-            }
+            this.safeEmit(WorkerSetEvents.error, error)
             reject(error)
         }
         this.promiseResponseMap.delete(uuid)
       } else {
-        if (this.emitter != null && this.emitter.listenerCount(WorkerSetEvents.elementError) > 0) {
-          this.emitter.emit(WorkerSetEvents.elementError, {
-            data,
-            event,
-            message: `Unknown worker message uuid: '${uuid}'`,
-          })
-        }
+        this.safeEmit(WorkerSetEvents.elementError, {
+          data,
+          event,
+          message: `Unknown worker message uuid: '${uuid}'`,
+        })
       }
     })
     worker.on('error', this.workerOptions.poolOptions?.errorHandler ?? EMPTY_FUNCTION)
     worker.once('error', error => {
-      if (this.emitter != null && this.emitter.listenerCount(WorkerSetEvents.error) > 0) {
-        this.emitter.emit(WorkerSetEvents.error, error)
-      }
+      this.safeEmit(WorkerSetEvents.error, error)
       const workerSetElement = this.getWorkerSetElementByWorker(worker)
       if (workerSetElement != null) {
         this.rejectPendingPromiseForWorker(workerSetElement, error)
@@ -240,9 +222,7 @@ export class WorkerSet<D extends WorkerData, R extends WorkerData> extends Worke
       worker.unref()
       // eslint-disable-next-line promise/no-promise-in-callback
       worker.terminate().catch((error: unknown) => {
-        if (this.emitter != null && this.emitter.listenerCount(WorkerSetEvents.error) > 0) {
-          this.emitter.emit(WorkerSetEvents.error, error)
-        }
+        this.safeEmit(WorkerSetEvents.error, error)
       })
     })
     worker.on('online', this.workerOptions.poolOptions?.onlineHandler ?? EMPTY_FUNCTION)
@@ -313,4 +293,10 @@ export class WorkerSet<D extends WorkerData, R extends WorkerData> extends Worke
     }
     this.workerSet.delete(workerSetElement)
   }
+
+  private safeEmit (event: WorkerSetEvents, ...args: unknown[]): void {
+    if (this.emitter != null && this.emitter.listenerCount(event) > 0) {
+      this.emitter.emit(event, ...args)
+    }
+  }
 }