Fix worker startup and cleanup some attributes in Wrk class.
[e-mobility-charging-stations-simulator.git] / src / charging-station / Worker.ts
index 84ec9edff55ba258813e498cfbdb45a4daa4ded8..efa327fd8a0666d301bfcae95d8b332a79158958 100644 (file)
@@ -8,8 +8,6 @@ import WorkerData from '../types/WorkerData';
 export default class Wrk {
   private _workerScript: string;
   private _workerData: WorkerData;
-  private _index: number;
-  private _concurrentWorkers: number;
   private _worker: Worker;
 
   /**
@@ -17,28 +15,15 @@ export default class Wrk {
    *
    * @param {string} workerScript
    * @param {WorkerData} workerData
-   * @param {number} numConcurrentWorkers
    */
-  constructor(workerScript: string, workerData: WorkerData, numConcurrentWorkers: number) {
+  constructor(workerScript: string, workerData: WorkerData) {
     this._workerData = workerData;
-    this._index = workerData.index;
     this._workerScript = workerScript;
     if (Configuration.useWorkerPool()) {
-      this._concurrentWorkers = Configuration.getWorkerPoolSize();
-      WorkerPool.concurrentWorkers = this._concurrentWorkers;
-    } else {
-      this._concurrentWorkers = numConcurrentWorkers;
+      WorkerPool.maxConcurrentWorkers = Configuration.getWorkerPoolSize();
     }
   }
 
-  /**
-   * @return {number}
-   * @public
-   */
-  public get concurrentWorkers(): number {
-    return this._concurrentWorkers;
-  }
-
   /**
    *
    * @return {Promise}
@@ -58,11 +43,13 @@ export default class Wrk {
    * @return {void}
    * @public
    */
-  addChargingStation(workerData: WorkerData, numConcurrentWorkers: number): void {
+  addWorkerElement(workerData: WorkerData): void {
+    // FIXME: also forbid to add an element if the current number of elements > max number of elements
+    if (Configuration.useWorkerPool()) {
+      return;
+    }
     this._workerData = workerData;
-    this._index = workerData.index;
-    this._concurrentWorkers = numConcurrentWorkers;
-    this._worker.postMessage({ id : Constants.START_CHARGING_STATION, workerData: workerData });
+    this._worker.postMessage({ id : Constants.START_WORKER_ELEMENT, workerData: workerData });
   }
 
   /**
@@ -95,7 +82,7 @@ export default class Wrk {
       worker.on('error', reject);
       worker.on('exit', (code) => {
         if (code !== 0) {
-          reject(new Error(`Worker id ${this._index} stopped with exit code ${code}`));
+          reject(new Error(`Worker stopped with exit code ${code}`));
         }
       });
       this._worker = worker;
@@ -104,14 +91,14 @@ export default class Wrk {
 }
 
 class WorkerPool {
-  public static concurrentWorkers: number;
+  public static maxConcurrentWorkers: number;
   private static _instance: Pool;
 
   private constructor() { }
 
   public static getInstance(): Pool {
-    if (!WorkerPool._instance || (WorkerPool._instance?.size === WorkerPool.concurrentWorkers)) {
-      WorkerPool._instance = new Pool({ max: WorkerPool.concurrentWorkers });
+    if (!WorkerPool._instance) {
+      WorkerPool._instance = new Pool({ max: WorkerPool.maxConcurrentWorkers });
     }
     return WorkerPool._instance;
   }