From 5144f4d17741ab6d0c4cd873537aa612df446839 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Thu, 7 Apr 2022 10:09:38 +0200 Subject: [PATCH] Ensure the WS connection have not been forcibly closed after opening MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- src/charging-station/ChargingStation.ts | 98 +++++++++++++------------ 1 file changed, 52 insertions(+), 46 deletions(-) diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index 457369ff..20705ae3 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -1390,58 +1390,64 @@ export default class ChargingStation { } private async onOpen(): Promise { - logger.info( - `${this.logPrefix()} Connected to OCPP server through ${this.wsConnectionUrl.toString()}` - ); - if (!this.isInAcceptedState()) { - // Send BootNotification - let registrationRetryCount = 0; - do { - this.bootNotificationResponse = await this.ocppRequestService.sendMessageHandler< - BootNotificationRequest, - BootNotificationResponse - >( - RequestCommand.BOOT_NOTIFICATION, - { - chargePointModel: this.bootNotificationRequest.chargePointModel, - chargePointVendor: this.bootNotificationRequest.chargePointVendor, - chargeBoxSerialNumber: this.bootNotificationRequest.chargeBoxSerialNumber, - firmwareVersion: this.bootNotificationRequest.firmwareVersion, - chargePointSerialNumber: this.bootNotificationRequest.chargePointSerialNumber, - iccid: this.bootNotificationRequest.iccid, - imsi: this.bootNotificationRequest.imsi, - meterSerialNumber: this.bootNotificationRequest.meterSerialNumber, - meterType: this.bootNotificationRequest.meterType, - }, - { skipBufferingOnError: true } - ); - if (!this.isInAcceptedState()) { - this.getRegistrationMaxRetries() !== -1 && registrationRetryCount++; - await Utils.sleep( - this.bootNotificationResponse?.interval - ? this.bootNotificationResponse.interval * 1000 - : Constants.OCPP_DEFAULT_BOOT_NOTIFICATION_INTERVAL + if (this.isWebSocketConnectionOpened()) { + logger.info( + `${this.logPrefix()} Connection to OCPP server through ${this.wsConnectionUrl.toString()} succeeded` + ); + if (!this.isInAcceptedState()) { + // Send BootNotification + let registrationRetryCount = 0; + do { + this.bootNotificationResponse = await this.ocppRequestService.sendMessageHandler< + BootNotificationRequest, + BootNotificationResponse + >( + RequestCommand.BOOT_NOTIFICATION, + { + chargePointModel: this.bootNotificationRequest.chargePointModel, + chargePointVendor: this.bootNotificationRequest.chargePointVendor, + chargeBoxSerialNumber: this.bootNotificationRequest.chargeBoxSerialNumber, + firmwareVersion: this.bootNotificationRequest.firmwareVersion, + chargePointSerialNumber: this.bootNotificationRequest.chargePointSerialNumber, + iccid: this.bootNotificationRequest.iccid, + imsi: this.bootNotificationRequest.imsi, + meterSerialNumber: this.bootNotificationRequest.meterSerialNumber, + meterType: this.bootNotificationRequest.meterType, + }, + { skipBufferingOnError: true } ); + if (!this.isInAcceptedState()) { + this.getRegistrationMaxRetries() !== -1 && registrationRetryCount++; + await Utils.sleep( + this.bootNotificationResponse?.interval + ? this.bootNotificationResponse.interval * 1000 + : Constants.OCPP_DEFAULT_BOOT_NOTIFICATION_INTERVAL + ); + } + } while ( + !this.isInAcceptedState() && + (registrationRetryCount <= this.getRegistrationMaxRetries() || + this.getRegistrationMaxRetries() === -1) + ); + } + if (this.isInAcceptedState()) { + await this.startMessageSequence(); + this.stopped && (this.stopped = false); + if (this.wsConnectionRestarted) { + this.flushMessageBuffer(); } - } while ( - !this.isInAcceptedState() && - (registrationRetryCount <= this.getRegistrationMaxRetries() || - this.getRegistrationMaxRetries() === -1) - ); - } - if (this.isInAcceptedState()) { - await this.startMessageSequence(); - this.stopped && (this.stopped = false); - if (this.wsConnectionRestarted && this.isWebSocketConnectionOpened()) { - this.flushMessageBuffer(); + } else { + logger.error( + `${this.logPrefix()} Registration failure: max retries reached (${this.getRegistrationMaxRetries()}) or retry disabled (${this.getRegistrationMaxRetries()})` + ); } + this.autoReconnectRetryCount = 0; + this.wsConnectionRestarted = false; } else { - logger.error( - `${this.logPrefix()} Registration failure: max retries reached (${this.getRegistrationMaxRetries()}) or retry disabled (${this.getRegistrationMaxRetries()})` + logger.warn( + `${this.logPrefix()} Connection to OCPP server through ${this.wsConnectionUrl.toString()} failed` ); } - this.autoReconnectRetryCount = 0; - this.wsConnectionRestarted = false; } private async onClose(code: number, reason: string): Promise { -- 2.34.1