X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Fui-server%2Fui-services%2FAbstractUIService.ts;h=7da2b62fa282644e1359398f45a0046bb386a10c;hb=5edd8ba0f8978cfb3ca9d80f299d9748c6c5970e;hp=4be2469b5ff8d421183e86cdba9f45c4a954471e;hpb=60a743910478b70e39dcefa5e1b752ec8a93880e;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ui-server/ui-services/AbstractUIService.ts b/src/charging-station/ui-server/ui-services/AbstractUIService.ts index 4be2469b..7da2b62f 100644 --- a/src/charging-station/ui-server/ui-services/AbstractUIService.ts +++ b/src/charging-station/ui-server/ui-services/AbstractUIService.ts @@ -5,18 +5,21 @@ import { ProcedureName, type ProtocolRequest, type ProtocolRequestHandler, + type ProtocolResponse, type ProtocolVersion, type RequestPayload, type ResponsePayload, ResponseStatus, } from '../../../types'; -import { Utils, logger } from '../../../utils'; -import { type AbstractUIServer, Bootstrap, UIServiceWorkerBroadcastChannel } from '../../internal'; +import { isNotEmptyArray, isNullOrUndefined, logger } from '../../../utils'; +import { Bootstrap } from '../../Bootstrap'; +import { UIServiceWorkerBroadcastChannel } from '../../broadcast-channel/UIServiceWorkerBroadcastChannel'; +import type { AbstractUIServer } from '../AbstractUIServer'; const moduleName = 'AbstractUIService'; export abstract class AbstractUIService { - protected static readonly ProcedureNameToBroadCastChannelProcedureNameMap: Omit< + protected static readonly ProcedureNameToBroadCastChannelProcedureNameMapping: Omit< Record, | ProcedureName.START_SIMULATOR | ProcedureName.STOP_SIMULATOR @@ -30,6 +33,7 @@ export abstract class AbstractUIService { BroadcastChannelProcedureName.START_AUTOMATIC_TRANSACTION_GENERATOR, [ProcedureName.STOP_AUTOMATIC_TRANSACTION_GENERATOR]: BroadcastChannelProcedureName.STOP_AUTOMATIC_TRANSACTION_GENERATOR, + [ProcedureName.SET_SUPERVISION_URL]: BroadcastChannelProcedureName.SET_SUPERVISION_URL, [ProcedureName.START_TRANSACTION]: BroadcastChannelProcedureName.START_TRANSACTION, [ProcedureName.STOP_TRANSACTION]: BroadcastChannelProcedureName.STOP_TRANSACTION, [ProcedureName.AUTHORIZE]: BroadcastChannelProcedureName.AUTHORIZE, @@ -62,11 +66,11 @@ export abstract class AbstractUIService { this.broadcastChannelRequests = new Map(); } - public async requestHandler(request: ProtocolRequest): Promise { + public async requestHandler(request: ProtocolRequest): Promise { let messageId: string; let command: ProcedureName; let requestPayload: RequestPayload | undefined; - let responsePayload: ResponsePayload; + let responsePayload: ResponsePayload | undefined; try { [messageId, command, requestPayload] = request; @@ -75,8 +79,8 @@ export abstract class AbstractUIService { `${command} is not implemented to handle message payload ${JSON.stringify( requestPayload, null, - 2 - )}` + 2, + )}`, ); } @@ -84,7 +88,7 @@ export abstract class AbstractUIService { responsePayload = await this.requestHandlers.get(command)(messageId, command, requestPayload); } catch (error) { // Log - logger.error(`${this.logPrefix(moduleName, 'messageHandler')} Handle request error:`, error); + logger.error(`${this.logPrefix(moduleName, 'requestHandler')} Handle request error:`, error); responsePayload = { hashIds: requestPayload?.hashIds, status: ResponseStatus.FAILURE, @@ -95,26 +99,26 @@ export abstract class AbstractUIService { errorStack: (error as Error).stack, errorDetails: (error as OCPPError).details, }; - } finally { - // Send response for payload not forwarded to broadcast channel - if (responsePayload !== undefined) { - this.sendResponse(messageId, responsePayload); - } + } + if (!isNullOrUndefined(responsePayload)) { + return this.uiServer.buildProtocolResponse(messageId, responsePayload); } } - public sendRequest( - messageId: string, - procedureName: ProcedureName, - requestPayload: RequestPayload - ): void { - this.uiServer.sendRequest( - this.uiServer.buildProtocolRequest(messageId, procedureName, requestPayload) - ); - } + // public sendRequest( + // messageId: string, + // procedureName: ProcedureName, + // requestPayload: RequestPayload + // ): void { + // this.uiServer.sendRequest( + // this.uiServer.buildProtocolRequest(messageId, procedureName, requestPayload) + // ); + // } public sendResponse(messageId: string, responsePayload: ResponsePayload): void { - this.uiServer.sendResponse(this.uiServer.buildProtocolResponse(messageId, responsePayload)); + if (this.uiServer.hasResponseHandler(messageId)) { + this.uiServer.sendResponse(this.uiServer.buildProtocolResponse(messageId, responsePayload)); + } } public logPrefix = (modName: string, methodName: string): string => { @@ -132,25 +136,25 @@ export abstract class AbstractUIService { protected handleProtocolRequest( uuid: string, procedureName: ProcedureName, - payload: RequestPayload + payload: RequestPayload, ): void { this.sendBroadcastChannelRequest( uuid, - AbstractUIService.ProcedureNameToBroadCastChannelProcedureNameMap[ + AbstractUIService.ProcedureNameToBroadCastChannelProcedureNameMapping[ procedureName ] as BroadcastChannelProcedureName, - payload + payload, ); } private sendBroadcastChannelRequest( uuid: string, procedureName: BroadcastChannelProcedureName, - payload: BroadcastChannelRequestPayload + payload: BroadcastChannelRequestPayload, ): void { - if (Utils.isNotEmptyArray(payload.hashIds)) { + if (isNotEmptyArray(payload.hashIds)) { payload.hashIds = payload.hashIds - .filter((hashId) => hashId !== undefined) + .filter((hashId) => !isNullOrUndefined(hashId)) .map((hashId) => { if (this.uiServer.chargingStations.has(hashId) === true) { return hashId; @@ -158,12 +162,12 @@ export abstract class AbstractUIService { logger.warn( `${this.logPrefix( moduleName, - 'sendBroadcastChannelRequest' - )} Charging station with hashId '${hashId}' not found` + 'sendBroadcastChannelRequest', + )} Charging station with hashId '${hashId}' not found`, ); }); } - const expectedNumberOfResponses = Utils.isNotEmptyArray(payload.hashIds) + const expectedNumberOfResponses = isNotEmptyArray(payload.hashIds) ? payload.hashIds.length : this.uiServer.chargingStations.size; this.uiServiceWorkerBroadcastChannel.sendRequest([uuid, procedureName, payload]);