Version 1.1.67
[e-mobility-charging-stations-simulator.git] / src / charging-station / Bootstrap.ts
index f881c19bfb0c77436dddf8aa39e37bfd3f954fbd..d1e2efd363f3066cea99c1b6558bf23823052caa 100644 (file)
@@ -14,6 +14,7 @@ import {
   ChargingStationData,
   ChargingStationWorkerData,
   ChargingStationWorkerMessage,
+  ChargingStationWorkerMessageData,
   ChargingStationWorkerMessageEvents,
 } from '../types/ChargingStationWorker';
 import { StationTemplateUrl } from '../types/ConfigurationData';
@@ -31,13 +32,17 @@ import UIServerFactory from './ui-server/UIServerFactory';
 
 const moduleName = 'Bootstrap';
 
-export default class Bootstrap {
+const missingChargingStationsConfigurationExitCode = 1;
+const noChargingStationTemplatesExitCode = 2;
+
+export class Bootstrap {
   private static instance: Bootstrap | null = null;
   private workerImplementation: WorkerAbstract<ChargingStationWorkerData> | null = null;
   private readonly uiServer!: AbstractUIServer;
   private readonly storage!: Storage;
   private numberOfChargingStationTemplates!: number;
   private numberOfChargingStations!: number;
+  private numberOfStartedChargingStations!: number;
   private readonly version: string = version;
   private started: boolean;
   private readonly workerScript: string;
@@ -103,12 +108,13 @@ export default class Bootstrap {
           console.warn(
             chalk.yellow("'stationTemplateUrls' not defined or empty in configuration, exiting")
           );
+          process.exit(missingChargingStationsConfigurationExitCode);
         }
         if (this.numberOfChargingStations === 0) {
           console.warn(
             chalk.yellow('No charging station template enabled in configuration, exiting')
           );
-          process.exit();
+          process.exit(noChargingStationTemplatesExitCode);
         } else {
           console.info(
             chalk.green(
@@ -172,14 +178,14 @@ export default class Bootstrap {
             workerChoiceStrategy: Configuration.getWorker().poolStrategy,
           },
           messageHandler: this.messageHandler.bind(this) as (
-            msg: ChargingStationWorkerMessage<ChargingStationData | Statistics>
+            msg: ChargingStationWorkerMessage<ChargingStationWorkerMessageData>
           ) => void,
         }
       ));
   }
 
   private messageHandler(
-    msg: ChargingStationWorkerMessage<ChargingStationData | Statistics>
+    msg: ChargingStationWorkerMessage<ChargingStationWorkerMessageData>
   ): void {
     // logger.debug(
     //   `${this.logPrefix()} ${moduleName}.messageHandler: Worker channel message received: ${JSON.stringify(
@@ -219,12 +225,12 @@ export default class Bootstrap {
 
   private workerEventStarted(data: ChargingStationData) {
     this.uiServer?.chargingStations.set(data.hashId, data);
-    this.started && ++this.numberOfChargingStations;
+    ++this.numberOfStartedChargingStations;
   }
 
   private workerEventStopped(data: ChargingStationData) {
-    this.uiServer?.chargingStations.delete(data.hashId);
-    this.started && --this.numberOfChargingStations;
+    this.uiServer?.chargingStations.set(data.hashId, data);
+    --this.numberOfStartedChargingStations;
   }
 
   private workerEventUpdated(data: ChargingStationData) {
@@ -236,8 +242,9 @@ export default class Bootstrap {
   };
 
   private initialize() {
-    this.numberOfChargingStations = 0;
     this.numberOfChargingStationTemplates = 0;
+    this.numberOfChargingStations = 0;
+    this.numberOfStartedChargingStations = 0;
     this.initializeWorkerImplementation();
   }
 
@@ -255,7 +262,7 @@ export default class Bootstrap {
       ),
     };
     await this.workerImplementation.addElement(workerData);
-    this.numberOfChargingStations++;
+    ++this.numberOfChargingStations;
   }
 
   private logPrefix(): string {