From: Jérôme Benoit Date: Sun, 28 Nov 2021 17:18:42 +0000 (+0100) Subject: Add sendResult helper to send response X-Git-Tag: v1.1.36~18 X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=de3dbcf58f56e0b7cc36762c6a03bdf908ca3df8;p=e-mobility-charging-stations-simulator.git Add sendResult helper to send response Signed-off-by: Jérôme Benoit --- diff --git a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts index 6510e68f..33f08255 100644 --- a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts @@ -47,11 +47,11 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer } public async handleRequest(messageId: string, commandName: OCPP16IncomingRequestCommand, commandPayload: Record): Promise { - let response: Record; + let result: Record; if (this.incomingRequestHandlers.has(commandName)) { try { - // Call the method to build the response - response = await this.incomingRequestHandlers.get(commandName)(commandPayload); + // Call the method to build the result + result = await this.incomingRequestHandlers.get(commandName)(commandPayload); } catch (error) { // Log logger.error(this.chargingStation.logPrefix() + ' Handle request error: %j', error); @@ -61,8 +61,8 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer // Throw exception throw new OCPPError(ErrorType.NOT_IMPLEMENTED, `${commandName} is not implemented to handle request payload ${JSON.stringify(commandPayload, null, 2)}`, commandName); } - // Send the built response - await this.chargingStation.ocppRequestService.sendMessage(messageId, response, MessageType.CALL_RESULT_MESSAGE, commandName); + // Send the built result + await this.chargingStation.ocppRequestService.sendResult(messageId, result, commandName); } // Simulate charging station restart diff --git a/src/charging-station/ocpp/1.6/OCPP16RequestService.ts b/src/charging-station/ocpp/1.6/OCPP16RequestService.ts index 4acaaac1..93bb2bcc 100644 --- a/src/charging-station/ocpp/1.6/OCPP16RequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16RequestService.ts @@ -378,6 +378,15 @@ export default class OCPP16RequestService extends OCPPRequestService { } } + public async sendResult(messageId: string, resultMessageData: Record, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise { + try { + // Send error + return await this.sendMessage(messageId, resultMessageData, MessageType.CALL_RESULT_MESSAGE, commandName); + } catch (err) { + this.handleRequestError(commandName as OCPP16RequestCommand, err as Error); + } + } + public async sendError(messageId: string, error: OCPPError, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise { try { // Send error diff --git a/src/charging-station/ocpp/OCPPRequestService.ts b/src/charging-station/ocpp/OCPPRequestService.ts index 2076a296..d36a5b22 100644 --- a/src/charging-station/ocpp/OCPPRequestService.ts +++ b/src/charging-station/ocpp/OCPPRequestService.ts @@ -24,13 +24,13 @@ export default abstract class OCPPRequestService { this.ocppResponseService = ocppResponseService; } - public async sendMessage(messageId: string, commandParams: any, messageType: MessageType, commandName: RequestCommand | IncomingRequestCommand, + public async sendMessage(messageId: string, messageData: any, messageType: MessageType, commandName: RequestCommand | IncomingRequestCommand, skipBufferingOnError = false): Promise { // eslint-disable-next-line @typescript-eslint/no-this-alias const self = this; // Send a message through wsConnection return Utils.promiseWithTimeout(new Promise((resolve, reject) => { - const messageToSend = this.buildMessageToSend(messageId, commandParams, messageType, commandName, responseCallback, rejectCallback); + const messageToSend = this.buildMessageToSend(messageId, messageData, messageType, commandName, responseCallback, rejectCallback); if (this.chargingStation.getEnableStatistics()) { this.chargingStation.performanceStatistics.addRequestStatistic(commandName, messageType); } @@ -44,7 +44,7 @@ export default abstract class OCPPRequestService { } else if (!skipBufferingOnError) { // Buffer it this.chargingStation.bufferMessage(messageToSend); - const ocppError = new OCPPError(ErrorType.GENERIC_ERROR, `WebSocket closed for buffered message id '${messageId}' with content '${messageToSend}'`, commandParams?.details ?? {}); + const ocppError = new OCPPError(ErrorType.GENERIC_ERROR, `WebSocket closed for buffered message id '${messageId}' with content '${messageToSend}'`, messageData?.details ?? {}); if (messageType === MessageType.CALL_MESSAGE) { // Reject it but keep the request in the cache return reject(ocppError); @@ -52,12 +52,12 @@ export default abstract class OCPPRequestService { return rejectCallback(ocppError, false); } else { // Reject it - return rejectCallback(new OCPPError(ErrorType.GENERIC_ERROR, `WebSocket closed for non buffered message id '${messageId}' with content '${messageToSend}'`, commandParams?.details ?? {}), false); + return rejectCallback(new OCPPError(ErrorType.GENERIC_ERROR, `WebSocket closed for non buffered message id '${messageId}' with content '${messageToSend}'`, messageData?.details ?? {}), false); } // Response? if (messageType !== MessageType.CALL_MESSAGE) { // Yes: send Ok - return resolve(commandParams); + return resolve(messageData); } /** @@ -92,11 +92,11 @@ export default abstract class OCPPRequestService { if (requestStatistic && self.chargingStation.getEnableStatistics()) { self.chargingStation.performanceStatistics.addRequestStatistic(commandName, MessageType.CALL_ERROR_MESSAGE); } - logger.error(`${self.chargingStation.logPrefix()} Error %j occurred when calling command %s with parameters %j`, error, commandName, commandParams); + logger.error(`${self.chargingStation.logPrefix()} Error %j occurred when calling command %s with message data %j`, error, commandName, messageData); self.chargingStation.requests.delete(messageId); reject(error); } - }), Constants.OCPP_WEBSOCKET_TIMEOUT, new OCPPError(ErrorType.GENERIC_ERROR, `Timeout for message id '${messageId}'`, commandParams?.details ?? {}), () => { + }), Constants.OCPP_WEBSOCKET_TIMEOUT, new OCPPError(ErrorType.GENERIC_ERROR, `Timeout for message id '${messageId}'`, messageData?.details ?? {}), () => { messageType === MessageType.CALL_MESSAGE && this.chargingStation.requests.delete(messageId); }); } @@ -106,7 +106,7 @@ export default abstract class OCPPRequestService { throw error; } - private buildMessageToSend(messageId: string, commandParams: Record, messageType: MessageType, commandName: RequestCommand | IncomingRequestCommand, + private buildMessageToSend(messageId: string, messageData: Record, messageType: MessageType, commandName: RequestCommand | IncomingRequestCommand, responseCallback: (payload: Record | string, requestPayload: Record) => Promise, rejectCallback: (error: OCPPError, requestStatistic?: boolean) => void): string { let messageToSend: string; @@ -115,18 +115,18 @@ export default abstract class OCPPRequestService { // Request case MessageType.CALL_MESSAGE: // Build request - this.chargingStation.requests.set(messageId, [responseCallback, rejectCallback, commandName, commandParams]); - messageToSend = JSON.stringify([messageType, messageId, commandName, commandParams]); + this.chargingStation.requests.set(messageId, [responseCallback, rejectCallback, commandName, messageData]); + messageToSend = JSON.stringify([messageType, messageId, commandName, messageData]); break; // Response case MessageType.CALL_RESULT_MESSAGE: // Build response - messageToSend = JSON.stringify([messageType, messageId, commandParams]); + messageToSend = JSON.stringify([messageType, messageId, messageData]); break; // Error Message case MessageType.CALL_ERROR_MESSAGE: // Build Error Message - messageToSend = JSON.stringify([messageType, messageId, commandParams?.code ?? ErrorType.GENERIC_ERROR, commandParams?.message ?? '', commandParams?.details ?? {}]); + messageToSend = JSON.stringify([messageType, messageId, messageData?.code ?? ErrorType.GENERIC_ERROR, messageData?.message ?? '', messageData?.details ?? {}]); break; } return messageToSend; @@ -142,5 +142,6 @@ export default abstract class OCPPRequestService { public abstract sendTransactionBeginMeterValues(connectorId: number, transactionId: number, beginMeterValue: MeterValue): Promise; public abstract sendTransactionEndMeterValues(connectorId: number, transactionId: number, endMeterValue: MeterValue): Promise; public abstract sendDiagnosticsStatusNotification(diagnosticsStatus: DiagnosticsStatus): Promise; + public abstract sendResult(messageId: string, resultMessageData: Record, commandName: RequestCommand | IncomingRequestCommand): Promise; public abstract sendError(messageId: string, error: OCPPError, commandName: RequestCommand | IncomingRequestCommand): Promise; }