X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2FOCPPIncomingRequestService.ts;h=5fadfb95d5ee5227327fe8fc0304a1aee2998f9b;hb=47086c3afcec31c01f97fd302b369c30372554d5;hp=e815fe298d4590f610f279443ca46998817552e2;hpb=d18886407cdb8b8148c87492f2c953075e708401;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/OCPPIncomingRequestService.ts b/src/charging-station/ocpp/OCPPIncomingRequestService.ts index e815fe29..5fadfb95 100644 --- a/src/charging-station/ocpp/OCPPIncomingRequestService.ts +++ b/src/charging-station/ocpp/OCPPIncomingRequestService.ts @@ -1,21 +1,35 @@ -import ChargingStation from '../ChargingStation'; +import type ChargingStation from '../ChargingStation'; +import { HandleErrorParams } from '../../types/Error'; import { IncomingRequestCommand } from '../../types/ocpp/Requests'; import { JsonType } from '../../types/JsonType'; import logger from '../../utils/Logger'; export default abstract class OCPPIncomingRequestService { + private static readonly instances: Map = new Map(); protected chargingStation: ChargingStation; - constructor(chargingStation: ChargingStation) { + protected constructor(chargingStation: ChargingStation) { this.chargingStation = chargingStation; } - protected handleIncomingRequestError(commandName: IncomingRequestCommand, error: Error, errorOcppResponse?: T): T { - logger.error(this.chargingStation.logPrefix() + ' Incoming request command ' + commandName + ' error: %j', error); - if (errorOcppResponse) { - return errorOcppResponse; + public static getInstance(this: new (chargingStation: ChargingStation) => T, chargingStation: ChargingStation): T { + if (!OCPPIncomingRequestService.instances.has(chargingStation.id)) { + OCPPIncomingRequestService.instances.set(chargingStation.id, new this(chargingStation)); + } + return OCPPIncomingRequestService.instances.get(chargingStation.id) as T; + } + + protected handleIncomingRequestError(commandName: IncomingRequestCommand, error: Error, params: HandleErrorParams = { throwError: true }): T { + logger.error(this.chargingStation.logPrefix() + ' Incoming request command %s error: %j', commandName, error); + if (!params?.throwError && params?.errorResponse) { + return params?.errorResponse; + } + if (params?.throwError && !params?.errorResponse) { + throw error; + } + if (params?.throwError && params?.errorResponse) { + return params?.errorResponse; } - throw error; } public abstract handleRequest(messageId: string, commandName: IncomingRequestCommand, commandPayload: JsonType): Promise;