X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2FOCPPRequestService.ts;h=c35f78de254e8080743aa81f11253877cfd6ca1c;hb=7d75bee1fb4f5946cba9bd453604ae9c359595c1;hp=f89567064467af1f276ab91322e8af9e2570a881;hpb=16b0d4e77d20b5f7004469f2206a0af1ee8984a5;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/OCPPRequestService.ts b/src/charging-station/ocpp/OCPPRequestService.ts index f8956706..c35f78de 100644 --- a/src/charging-station/ocpp/OCPPRequestService.ts +++ b/src/charging-station/ocpp/OCPPRequestService.ts @@ -28,27 +28,8 @@ export default abstract class OCPPRequestService { // eslint-disable-next-line @typescript-eslint/no-this-alias const self = this; // Send a message through wsConnection - return new Promise((resolve: (value?: any | PromiseLike) => void, reject: (reason?: any) => void) => { - let messageToSend: string; - // Type of message - switch (messageType) { - // Request - case MessageType.CALL_MESSAGE: - // Build request - this.chargingStation.requests.set(messageId, [responseCallback, rejectCallback, commandParams as Record]); - messageToSend = JSON.stringify([messageType, messageId, commandName, commandParams]); - break; - // Response - case MessageType.CALL_RESULT_MESSAGE: - // Build response - messageToSend = JSON.stringify([messageType, messageId, commandParams]); - 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 ?? {}]); - break; - } + return new Promise((resolve, reject) => { + const messageToSend = this.buildMessageToSend(messageId, commandParams, messageType, commandName, responseCallback, rejectCallback); if (this.chargingStation.getEnableStatistics()) { this.chargingStation.performanceStatistics.addRequestStatistic(commandName, messageType); } @@ -62,12 +43,12 @@ export default abstract class OCPPRequestService { // Buffer it this.chargingStation.addToMessageQueue(messageToSend); // Reject it - return rejectCallback(new OCPPError(commandParams?.code ?? ErrorType.GENERIC_ERROR, commandParams?.message ?? `WebSocket closed for message id '${messageId}' with content '${messageToSend}', message buffered`, commandParams.details ?? {})); + return rejectCallback(new OCPPError(commandParams?.code ?? ErrorType.GENERIC_ERROR, commandParams?.message ?? `WebSocket closed for message id '${messageId}' with content '${messageToSend}', message buffered`, commandParams?.details ?? {})); } // Response? if (messageType === MessageType.CALL_RESULT_MESSAGE) { // Yes: send Ok - resolve(); + resolve(commandName); } else if (messageType === MessageType.CALL_ERROR_MESSAGE) { // Send timeout setTimeout(() => rejectCallback(new OCPPError(commandParams?.code ?? ErrorType.GENERIC_ERROR, commandParams?.message ?? `Timeout for message id '${messageId}' with content '${messageToSend}'`, commandParams?.details ?? {})), Constants.OCPP_ERROR_TIMEOUT); @@ -112,6 +93,31 @@ export default abstract class OCPPRequestService { throw error; } + private buildMessageToSend(messageId: string, commandParams: any, messageType: MessageType, commandName: RequestCommand | IncomingRequestCommand, + responseCallback: (payload: Record | string, requestPayload: Record) => Promise, rejectCallback: (error: OCPPError) => void): string { + let messageToSend: string; + // Type of message + switch (messageType) { + // Request + case MessageType.CALL_MESSAGE: + // Build request + this.chargingStation.requests.set(messageId, [responseCallback, rejectCallback, commandParams as Record]); + messageToSend = JSON.stringify([messageType, messageId, commandName, commandParams]); + break; + // Response + case MessageType.CALL_RESULT_MESSAGE: + // Build response + messageToSend = JSON.stringify([messageType, messageId, commandParams]); + 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 ?? {}]); + break; + } + return messageToSend; + } + public abstract sendHeartbeat(): Promise; public abstract sendBootNotification(chargePointModel: string, chargePointVendor: string, chargeBoxSerialNumber?: string, firmwareVersion?: string, chargePointSerialNumber?: string, iccid?: string, imsi?: string, meterSerialNumber?: string, meterType?: string): Promise; public abstract sendStatusNotification(connectorId: number, status: ChargePointStatus, errorCode?: ChargePointErrorCode): Promise;