Fix message buffer handling.
authorJérôme Benoit <jerome.benoit@sap.com>
Fri, 13 Nov 2020 09:45:26 +0000 (10:45 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Fri, 13 Nov 2020 09:45:26 +0000 (10:45 +0100)
And typing.

Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/charging-station/ChargingStation.ts
src/types/CommandStatistics.ts [moved from src/types/CommandStatisticsData.ts with 56% similarity]
src/types/ocpp/1.6/RequestResponses.ts
src/types/ocpp/1.6/Requests.ts [new file with mode: 0644]
src/utils/Statistics.ts

index 18013db4a2ba7da04283fbacce8aba3b1528aaec..85a944b5e812a7938f5d1c1daa33ae38cfbc2934 100644 (file)
@@ -11,10 +11,11 @@ import { ChargePointErrorCode } from '../types/ocpp/1.6/ChargePointErrorCode';
 import { ChargePointStatus } from '../types/ocpp/1.6/ChargePointStatus';
 import ChargingStationInfo from '../types/ChargingStationInfo';
 import Configuration from '../utils/Configuration';
-import Constants from '../utils/Constants.js';
+import Constants from '../utils/Constants';
 import ElectricUtils from '../utils/ElectricUtils';
 import MeasurandValues from '../types/MeasurandValues';
-import OCPPError from './OcppError.js';
+import OCPPError from './OcppError';
+import Requests from '../types/ocpp/1.6/Requests';
 import Statistics from '../utils/Statistics';
 import Utils from '../utils/Utils';
 import WebSocket from 'ws';
@@ -44,8 +45,8 @@ export default class ChargingStation {
   private _autoReconnectRetryCount: number;
   private _autoReconnectMaxRetries: number;
   private _autoReconnectTimeout: number;
-  private _requests: { [id: string]: [(payload?, requestPayload?) => void, (error?: OCPPError) => void, object] };
-  private _messageQueue: any[];
+  private _requests: Requests;
+  private _messageQueue: string[];
   private _automaticTransactionGeneration: AutomaticTransactionGenerator;
   private _authorizedTags: string[];
   private _heartbeatInterval: number;
@@ -56,7 +57,7 @@ export default class ChargingStation {
   constructor(index: number, stationTemplateFile: string) {
     this._index = index;
     this._stationTemplateFile = stationTemplateFile;
-    this._connectors = {};
+    this._connectors = {} as Connectors;
     this._initialize();
 
     this._hasStopped = false;
@@ -65,8 +66,8 @@ export default class ChargingStation {
     this._autoReconnectMaxRetries = Configuration.getAutoReconnectMaxRetries(); // -1 for unlimited
     this._autoReconnectTimeout = Configuration.getAutoReconnectTimeout() * 1000; // Ms, zero for disabling
 
-    this._requests = {};
-    this._messageQueue = [];
+    this._requests = {} as Requests;
+    this._messageQueue = [] as string[];
 
     this._authorizedTags = this._loadAndGetAuthorizedTags();
   }
@@ -519,8 +520,9 @@ export default class ChargingStation {
     if (this._hasSocketRestarted) {
       this._startMessageSequence();
       if (!Utils.isEmptyArray(this._messageQueue)) {
-        this._messageQueue.forEach((message) => {
+        this._messageQueue.forEach((message, index) => {
           if (this._wsConnection && this._wsConnection.readyState === WebSocket.OPEN) {
+            this._messageQueue.splice(index, 1);
             this._wsConnection.send(message);
           }
         });
similarity index 56%
rename from src/types/CommandStatisticsData.ts
rename to src/types/CommandStatistics.ts
index edc92cc078c7d64236fee533645a6e3d2400bd75..7a4579b7b47226a00d72fb798566da601ac0318b 100644 (file)
@@ -1,4 +1,4 @@
-export default interface CommandStatisticsData {
+export interface CommandStatisticsData {
   countRequest: number;
   countResponse: number;
   countError: number;
@@ -8,3 +8,7 @@ export default interface CommandStatisticsData {
   totalTime: number;
   avgTime: number;
 }
+
+export default interface CommandStatistics {
+  [command: string]: CommandStatisticsData;
+}
index 95b00eb9061e8027fc42fec809f1e9c2e7cc06ad..68bb86f8a31f07baab4589d20748f2a0c0da6953 100644 (file)
@@ -4,7 +4,7 @@ export enum DefaultResponseStatus {
 }
 
 export interface DefaultRequestResponse {
-  status: DefaultResponseStatus
+  status: DefaultResponseStatus;
 }
 
 export enum UnlockStatus {
@@ -25,5 +25,5 @@ export enum ConfigurationStatus {
 }
 
 export interface ConfigurationResponse {
-  status: ConfigurationStatus
+  status: ConfigurationStatus;
 }
diff --git a/src/types/ocpp/1.6/Requests.ts b/src/types/ocpp/1.6/Requests.ts
new file mode 100644 (file)
index 0000000..78123f8
--- /dev/null
@@ -0,0 +1,5 @@
+import OCPPError from '../../../charging-station/OcppError';
+
+export default interface Requests {
+  [id: string]: [(payload?, requestPayload?) => void, (error?: OCPPError) => void, object];
+}
index 0f0674d1a08240e0343d57ea74c848957ea79882..ceef29d95d682cbeff4f7562a274a77a378415b3 100644 (file)
@@ -1,4 +1,5 @@
-import CommandStatisticsData from '../types/CommandStatisticsData';
+import CommandStatistics, { CommandStatisticsData } from '../types/CommandStatistics';
+
 import Configuration from './Configuration';
 import Constants from './Constants';
 import { PerformanceEntry } from 'perf_hooks';
@@ -8,12 +9,10 @@ import logger from './Logger';
 export default class Statistics {
   private static instance: Statistics;
   private _objName: string;
-  private _commandsStatistics: {
-    [command: string]: CommandStatisticsData
-  };
+  private _commandsStatistics: CommandStatistics;
 
   private constructor() {
-    this._commandsStatistics = {};
+    this._commandsStatistics = {} as CommandStatistics;
   }
 
   set objName(objName: string) {