Track OCPP commande use at sending error message
[e-mobility-charging-stations-simulator.git] / src / charging-station / AutomaticTransactionGenerator.ts
index 3f5b03c12cebf30c53822b6f6b998d08c810a9a4..0e0982a201dd7165f39212dc3acaba7b8e893002 100644 (file)
@@ -2,7 +2,7 @@
 
 import { AuthorizationStatus, AuthorizeResponse, StartTransactionResponse, StopTransactionReason, StopTransactionResponse } from '../types/ocpp/Transaction';
 
-import ChargingStation from './ChargingStation';
+import type ChargingStation from './ChargingStation';
 import Constants from '../utils/Constants';
 import PerformanceStatistics from '../performance/PerformanceStatistics';
 import { Status } from '../types/AutomaticTransactionGenerator';
@@ -10,17 +10,25 @@ import Utils from '../utils/Utils';
 import logger from '../utils/Logger';
 
 export default class AutomaticTransactionGenerator {
+  private static readonly instances: Map<string, AutomaticTransactionGenerator> = new Map<string, AutomaticTransactionGenerator>();
   public started: boolean;
   private readonly chargingStation: ChargingStation;
   private readonly connectorsStatus: Map<number, Status>;
 
-  constructor(chargingStation: ChargingStation) {
+  private constructor(chargingStation: ChargingStation) {
     this.chargingStation = chargingStation;
     this.connectorsStatus = new Map<number, Status>();
     this.stopConnectors();
     this.started = false;
   }
 
+  public static getInstance(chargingStation: ChargingStation): AutomaticTransactionGenerator {
+    if (!AutomaticTransactionGenerator.instances.has(chargingStation.id)) {
+      AutomaticTransactionGenerator.instances.set(chargingStation.id, new AutomaticTransactionGenerator(chargingStation));
+    }
+    return AutomaticTransactionGenerator.instances.get(chargingStation.id);
+  }
+
   public start(): void {
     if (this.started) {
       logger.error(`${this.logPrefix()} trying to start while already started`);
@@ -67,7 +75,7 @@ export default class AutomaticTransactionGenerator {
         break;
       }
       if (!this.chargingStation.isInAcceptedState()) {
-        logger.error(this.logPrefix(connectorId) + ' entered in transaction loop while the charging station is in accepted state');
+        logger.error(this.logPrefix(connectorId) + ' entered in transaction loop while the charging station is not in accepted state');
         this.stopConnector(connectorId);
         break;
       }