X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2FOCPPIncomingRequestService.ts;h=bf5170956f499d4c9e41897f879bc0a1e095c320;hb=492cf6ab7b4e5231974ca1a9c219afbf0d53f4b9;hp=897127b6e2ffa029073db6e365c969356c4490da;hpb=1af50fac1ab71fed19f11864d1644261046698a3;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/OCPPIncomingRequestService.ts b/src/charging-station/ocpp/OCPPIncomingRequestService.ts index 897127b6..bf517095 100644 --- a/src/charging-station/ocpp/OCPPIncomingRequestService.ts +++ b/src/charging-station/ocpp/OCPPIncomingRequestService.ts @@ -1,12 +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 abstract handleRequest(messageId: string, commandName: IncomingRequestCommand, commandPayload: Record): Promise; + public static getInstance(this: new () => T): T { + if (!OCPPIncomingRequestService.instance) { + OCPPIncomingRequestService.instance = new this(); + } + return OCPPIncomingRequestService.instance as T; + } + + 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; }