private constructor() {
this.started = false;
this.workerScript = path.join(
+ // wouldn't path.resolve(./ChargingStationWorker.js) faster & simpler ?
path.resolve(__dirname, '../'),
'charging-station',
'ChargingStationWorker.js'
);
- this.initWorkerImplementation();
- Configuration.getUIWebSocketServer().enabled &&
+ this.initWorkerImplementation(); // init thread
+ Configuration.getUIWebSocketServer().enabled && // create webSocket
(this.uiWebSocketServer = new UIWebSocketServer({
...Configuration.getUIWebSocketServer().options,
handleProtocols: UIServiceUtils.handleProtocols,
}));
- Configuration.getPerformanceStorage().enabled &&
+ Configuration.getPerformanceStorage().enabled && // create storage ??? but for what
(this.storage = StorageFactory.getStorage(
Configuration.getPerformanceStorage().type,
Configuration.getPerformanceStorage().uri,
workerChoiceStrategy: Configuration.getWorkerPoolStrategy(),
},
messageHandler: async (msg: ChargingStationWorkerMessage) => {
+ console.log('initWorkerImplementation: messageHandler: ', msg);
if (msg.id === ChargingStationWorkerMessageEvents.STARTED) {
this.uiWebSocketServer.chargingStations.add(msg.data.id as string);
+ console.log(this.uiWebSocketServer.chargingStations);
} else if (msg.id === ChargingStationWorkerMessageEvents.STOPPED) {
this.uiWebSocketServer.chargingStations.delete(msg.data.id as string);
} else if (msg.id === ChargingStationWorkerMessageEvents.PERFORMANCE_STATISTICS) {
}
protected buildProtocolMessage(command: ProtocolCommand, payload: JsonType): string {
+ console.log(JSON.stringify([command, payload])); // DEBUG
return JSON.stringify([command, payload]);
}
- private handleListChargingStations(): Set<string> {
- return this.uiWebSocketServer.chargingStations;
+ private handleListChargingStations(): string[] {
+ // FIXED
+ return Array.from(this.uiWebSocketServer.chargingStations);
}
}
if (!isMainThread) {
throw new Error('Trying to get a worker implementation outside the main thread');
}
- workerOptions = workerOptions ?? ({} as WorkerOptions);
+ workerOptions = workerOptions ?? ({} as WorkerOptions); // why not default parameter ?
workerOptions.workerStartDelay =
- workerOptions?.workerStartDelay ?? WorkerConstants.DEFAULT_WORKER_START_DELAY;
+ workerOptions?.workerStartDelay ?? WorkerConstants.DEFAULT_WORKER_START_DELAY; // why null safety ?
workerOptions.elementStartDelay =
workerOptions?.elementStartDelay ?? WorkerConstants.DEFAULT_ELEMENT_START_DELAY;
workerOptions.poolOptions = workerOptions?.poolOptions ?? ({} as PoolOptions<Worker>);
workerOptions?.messageHandler &&
// eslint-disable-next-line @typescript-eslint/no-misused-promises
(workerOptions.poolOptions.messageHandler = workerOptions.messageHandler);
- let workerImplementation: WorkerAbstract<T> = null;
+ console.log('before');
+ let workerImplementation: WorkerAbstract<T> = null; // enabling strictNullChecks would be safer ?
+ console.log(workerImplementation);
switch (workerProcessType) {
case WorkerProcessType.WORKER_SET:
workerOptions.elementsPerWorker =
id: WorkerMessageEvents.START_WORKER_ELEMENT,
data: elementData,
});
- this.getLastWorkerSetElement().numberOfWorkerElements++;
+ this.getLastWorkerSetElement().numberOfWorkerElements++; // should there not be a hanshake to be safer ?
// Start element sequentially to optimize memory at startup
if (this.workerOptions.elementStartDelay > 0) {
await Utils.sleep(this.workerOptions.elementStartDelay);