X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2FOCPPIncomingRequestService.ts;h=5fadfb95d5ee5227327fe8fc0304a1aee2998f9b;hb=47086c3afcec31c01f97fd302b369c30372554d5;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..5fadfb95 100644 --- a/src/charging-station/ocpp/OCPPIncomingRequestService.ts +++ b/src/charging-station/ocpp/OCPPIncomingRequestService.ts @@ -1,21 +1,36 @@ -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, 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.id)) { + OCPPIncomingRequestService.instances.set(chargingStation.id, new this(chargingStation)); } - throw error; + return OCPPIncomingRequestService.instances.get(chargingStation.id) as T; } - public abstract handleRequest(messageId: string, commandName: IncomingRequestCommand, commandPayload: Record): Promise; + 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; + } + } + + public abstract handleRequest(messageId: string, commandName: IncomingRequestCommand, commandPayload: JsonType): Promise; }