X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcharging-station%2Focpp%2FOCPPRequestService.ts;h=13cb170789f502fce73c4e6847b9e45f12fad6da;hb=59395dc149654128f2996f4999bccb66270f54e4;hp=0d95ffa5493f8f4b06677c43f7cf47231ff9ee30;hpb=1b821a640d1f793e969eed6d76e9c20e7cebb626;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/OCPPRequestService.ts b/src/charging-station/ocpp/OCPPRequestService.ts index 0d95ffa5..13cb1707 100644 --- a/src/charging-station/ocpp/OCPPRequestService.ts +++ b/src/charging-station/ocpp/OCPPRequestService.ts @@ -1,6 +1,8 @@ import Ajv, { type JSONSchemaType } from 'ajv'; import ajvFormats from 'ajv-formats'; +import type OCPPResponseService from './OCPPResponseService'; +import { OCPPServiceUtils } from './OCPPServiceUtils'; import OCPPError from '../../exception/OCPPError'; import PerformanceStatistics from '../../performance/PerformanceStatistics'; import type { EmptyObject } from '../../types/EmptyObject'; @@ -23,8 +25,6 @@ import Constants from '../../utils/Constants'; import logger from '../../utils/Logger'; import Utils from '../../utils/Utils'; import type ChargingStation from '../ChargingStation'; -import type OCPPResponseService from './OCPPResponseService'; -import { OCPPServiceUtils } from './OCPPServiceUtils'; const moduleName = 'OCPPRequestService'; @@ -113,6 +113,7 @@ export default abstract class OCPPRequestService { params: RequestParams = { skipBufferingOnError: false, triggerMessage: false, + throwError: false, } ): Promise { try { @@ -125,7 +126,9 @@ export default abstract class OCPPRequestService { params ); } catch (error) { - this.handleSendMessageError(chargingStation, commandName, error as Error); + this.handleSendMessageError(chargingStation, commandName, error as Error, { + throwError: params.throwError, + }); } } @@ -228,6 +231,9 @@ export default abstract class OCPPRequestService { // Send a message through wsConnection return Utils.promiseWithTimeout( new Promise((resolve, reject) => { + if (chargingStation.getEnableStatistics() === true) { + chargingStation.performanceStatistics.addRequestStatistic(commandName, messageType); + } const messageToSend = this.buildMessageToSend( chargingStation, messageId, @@ -237,27 +243,30 @@ export default abstract class OCPPRequestService { responseCallback, errorCallback ); - if (chargingStation.getEnableStatistics() === true) { - chargingStation.performanceStatistics.addRequestStatistic(commandName, messageType); - } let sendError = false; // Check if wsConnection opened - if (chargingStation.isWebSocketConnectionOpened() === true) { - const beginId = PerformanceStatistics.beginMeasure(commandName as string); + const wsOpened = chargingStation.isWebSocketConnectionOpened() === true; + if (wsOpened) { + const beginId = PerformanceStatistics.beginMeasure(commandName); try { chargingStation.wsConnection.send(messageToSend); + logger.debug( + `${chargingStation.logPrefix()} >> Command '${commandName}' sent ${OCPPServiceUtils.getMessageTypeString( + messageType + )} payload: ${messageToSend}` + ); } catch (error) { + logger.error( + `${chargingStation.logPrefix()} >> Command '${commandName}' failed to send ${OCPPServiceUtils.getMessageTypeString( + messageType + )} payload: ${messageToSend}:`, + error + ); sendError = true; } - PerformanceStatistics.endMeasure(commandName as string, beginId); - logger.debug( - `${chargingStation.logPrefix()} >> Command '${commandName}' sent ${this.getMessageTypeString( - messageType - )} payload: ${messageToSend}` - ); + PerformanceStatistics.endMeasure(commandName, beginId); } - const wsClosedOrErrored = - chargingStation.isWebSocketConnectionOpened() === false || sendError === true; + const wsClosedOrErrored = !wsOpened || sendError === true; if (wsClosedOrErrored && params.skipBufferingOnError === false) { // Buffer chargingStation.bufferMessage(messageToSend); @@ -335,7 +344,7 @@ export default abstract class OCPPRequestService { ); } logger.error( - `${chargingStation.logPrefix()} Error occurred at ${self.getMessageTypeString( + `${chargingStation.logPrefix()} Error occurred at ${OCPPServiceUtils.getMessageTypeString( messageType )} command ${commandName} with PDU %j:`, messagePayload, @@ -379,13 +388,13 @@ export default abstract class OCPPRequestService { // Request case MessageType.CALL_MESSAGE: // Build request + this.validateRequestPayload(chargingStation, commandName, messagePayload as JsonObject); chargingStation.requests.set(messageId, [ responseCallback, errorCallback, commandName, messagePayload as JsonType, ]); - this.validateRequestPayload(chargingStation, commandName, messagePayload as JsonObject); messageToSend = JSON.stringify([ messageType, messageId, @@ -418,17 +427,6 @@ export default abstract class OCPPRequestService { return messageToSend; } - private getMessageTypeString(messageType: MessageType): string { - switch (messageType) { - case MessageType.CALL_MESSAGE: - return 'request'; - case MessageType.CALL_RESULT_MESSAGE: - return 'response'; - case MessageType.CALL_ERROR_MESSAGE: - return 'error'; - } - } - private handleSendMessageError( chargingStation: ChargingStation, commandName: RequestCommand | IncomingRequestCommand,