X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2FOCPPIncomingRequestService.ts;h=bf5170956f499d4c9e41897f879bc0a1e095c320;hb=492cf6ab7b4e5231974ca1a9c219afbf0d53f4b9;hp=ff2dfd4c18d4f4098d1374cdb45767a48dd27c55;hpb=e64c092349ce9744ed017cfa757dc0b86bff5fd5;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/OCPPIncomingRequestService.ts b/src/charging-station/ocpp/OCPPIncomingRequestService.ts index ff2dfd4c..bf517095 100644 --- a/src/charging-station/ocpp/OCPPIncomingRequestService.ts +++ b/src/charging-station/ocpp/OCPPIncomingRequestService.ts @@ -1,21 +1,49 @@ -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 { - protected chargingStation: ChargingStation; + private static instance: OCPPIncomingRequestService | null = null; - constructor(chargingStation: ChargingStation) { - this.chargingStation = chargingStation; + protected constructor() { + // This is intentional } - public 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 () => T): T { + if (!OCPPIncomingRequestService.instance) { + OCPPIncomingRequestService.instance = new this(); } - throw error; + return OCPPIncomingRequestService.instance as T; } - public abstract handleRequest(messageId: string, commandName: IncomingRequestCommand, commandPayload: Record): Promise; + protected handleIncomingRequestError( + chargingStation: ChargingStation, + commandName: IncomingRequestCommand, + error: Error, + params: HandleErrorParams = { throwError: true } + ): T { + logger.error( + 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 incomingRequestHandler( + chargingStation: ChargingStation, + messageId: string, + commandName: IncomingRequestCommand, + commandPayload: JsonType + ): Promise; }