X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2FOCPPIncomingRequestService.ts;h=8d34e734a19ad67f256752d80f958a22c1734cfa;hb=370ae4ee4ed2b3499ad1c1d286cfe3ffe451b5ee;hp=3f8dda43fedd1a076ed01a19c4106aaac23ad261;hpb=bc464bb1fb95c50a14b25478d35be76b7d8e5498;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/OCPPIncomingRequestService.ts b/src/charging-station/ocpp/OCPPIncomingRequestService.ts index 3f8dda43..8d34e734 100644 --- a/src/charging-station/ocpp/OCPPIncomingRequestService.ts +++ b/src/charging-station/ocpp/OCPPIncomingRequestService.ts @@ -1,22 +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 getLogger from '../../utils/Logger'; +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, errorOcppResponse?: T): T { - getLogger().error(this.chargingStation.logPrefix() + ' Incoming request command %s error: %j', commandName, error); - if (errorOcppResponse) { - return errorOcppResponse; + 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: JsonType): Promise; + public abstract handleRequest( + messageId: string, + commandName: IncomingRequestCommand, + commandPayload: JsonType + ): Promise; }