X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2FOCPPIncomingRequestService.ts;h=b5f607f534abb3e98a8dfa0c1eb8842740fc88c6;hb=c75a66757c7a26aa7b9fbdbcaaed413c77a45df1;hp=6f91ead088003a09baf2f5b3c419da349fe0c35a;hpb=c7f95d1604f9d7b10b3f7b82912eb8a2b1d24bc1;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/OCPPIncomingRequestService.ts b/src/charging-station/ocpp/OCPPIncomingRequestService.ts index 6f91ead0..b5f607f5 100644 --- a/src/charging-station/ocpp/OCPPIncomingRequestService.ts +++ b/src/charging-station/ocpp/OCPPIncomingRequestService.ts @@ -1,21 +1,55 @@ -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< + string, + OCPPIncomingRequestService + >(); + protected chargingStation: ChargingStation; - constructor(chargingStation: ChargingStation) { + protected constructor(chargingStation: ChargingStation) { this.chargingStation = chargingStation; } - protected handleIncomingRequestError(commandName: IncomingRequestCommand, error: Error, ocppResponse?): unknown { - logger.error(this.chargingStation.logPrefix() + ' Incoming request command ' + commandName + ' error: %j', error); - if (ocppResponse) { - return ocppResponse; + public static getInstance( + this: new (chargingStation: ChargingStation) => T, + chargingStation: ChargingStation + ): T { + if (!OCPPIncomingRequestService.instances.has(chargingStation.hashId)) { + OCPPIncomingRequestService.instances.set(chargingStation.hashId, new this(chargingStation)); + } + return OCPPIncomingRequestService.instances.get(chargingStation.hashId) 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: Record): Promise; + public abstract incomingRequestHandler( + messageId: string, + commandName: IncomingRequestCommand, + commandPayload: JsonType + ): Promise; }