X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FAutomaticTransactionGenerator.ts;h=0e0982a201dd7165f39212dc3acaba7b8e893002;hb=1d4ad05181ef93c9ea15c25fbd13c6ea22ff35dc;hp=6913853b2911b8354784d9799f9d377c8356aa2d;hpb=54544ef1ca864c3a2e07ff020a7b8f0b38a825fd;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/AutomaticTransactionGenerator.ts b/src/charging-station/AutomaticTransactionGenerator.ts index 6913853b..0e0982a2 100644 --- a/src/charging-station/AutomaticTransactionGenerator.ts +++ b/src/charging-station/AutomaticTransactionGenerator.ts @@ -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 = new Map(); public started: boolean; - private chargingStation: ChargingStation; - private connectorsStatus: Map; + private readonly chargingStation: ChargingStation; + private readonly connectorsStatus: Map; - constructor(chargingStation: ChargingStation) { + private constructor(chargingStation: ChargingStation) { this.chargingStation = chargingStation; this.connectorsStatus = new Map(); 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`); @@ -40,7 +48,7 @@ export default class AutomaticTransactionGenerator { } private startConnectors(): void { - if (this.connectorsStatus?.size !== 0 && this.connectorsStatus.size !== this.chargingStation.getNumberOfConnectors()) { + if (this.connectorsStatus?.size > 0 && this.connectorsStatus.size !== this.chargingStation.getNumberOfConnectors()) { this.connectorsStatus.clear(); } for (const connectorId of this.chargingStation.connectors.keys()) { @@ -66,8 +74,8 @@ export default class AutomaticTransactionGenerator { this.stopConnector(connectorId); break; } - if (!this.chargingStation.isRegistered()) { - logger.error(this.logPrefix(connectorId) + ' entered in transaction loop while the charging station is not registered'); + if (!this.chargingStation.isInAcceptedState()) { + logger.error(this.logPrefix(connectorId) + ' entered in transaction loop while the charging station is not in accepted state'); this.stopConnector(connectorId); break; }