+ ));
+ }
+
+ private messageHandler(
+ msg: ChargingStationWorkerMessage<ChargingStationWorkerMessageData>
+ ): void {
+ // logger.debug(
+ // `${this.logPrefix()} ${moduleName}.messageHandler: Worker channel message received: ${JSON.stringify(
+ // msg,
+ // null,
+ // 2
+ // )}`
+ // );
+ try {
+ switch (msg.id) {
+ case ChargingStationWorkerMessageEvents.STARTED:
+ this.workerEventStarted(msg.data as ChargingStationData);
+ break;
+ case ChargingStationWorkerMessageEvents.STOPPED:
+ this.workerEventStopped(msg.data as ChargingStationData);
+ break;
+ case ChargingStationWorkerMessageEvents.UPDATED:
+ this.workerEventUpdated(msg.data as ChargingStationData);
+ break;
+ case ChargingStationWorkerMessageEvents.PERFORMANCE_STATISTICS:
+ this.workerEventPerformanceStatistics(msg.data as Statistics);
+ break;
+ default:
+ throw new BaseError(
+ `Unknown event type: '${msg.id}' for data: ${JSON.stringify(msg.data, null, 2)}`
+ );
+ }
+ } catch (error) {
+ logger.error(
+ `${this.logPrefix()} ${moduleName}.messageHandler: Error occurred while handling '${
+ msg.id
+ }' event:`,
+ error
+ );
+ }
+ }
+
+ private workerEventStarted(data: ChargingStationData) {
+ this.uiServer?.chargingStations.set(data.hashId, data);
+ ++this.numberOfStartedChargingStations;
+ }
+
+ private workerEventStopped(data: ChargingStationData) {
+ this.uiServer?.chargingStations.set(data.hashId, data);
+ --this.numberOfStartedChargingStations;
+ }
+
+ private workerEventUpdated(data: ChargingStationData) {
+ this.uiServer?.chargingStations.set(data.hashId, data);
+ }
+
+ private workerEventPerformanceStatistics = (data: Statistics) => {
+ this.storage.storePerformanceStatistics(data) as void;
+ };
+
+ private initialize() {
+ this.numberOfChargingStationTemplates = 0;
+ this.numberOfChargingStations = 0;
+ this.numberOfStartedChargingStations = 0;
+ this.initializeWorkerImplementation();
+ }
+
+ private async startChargingStation(
+ index: number,
+ stationTemplateUrl: StationTemplateUrl
+ ): Promise<void> {
+ const workerData: ChargingStationWorkerData = {
+ index,
+ templateFile: path.join(
+ path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../'),
+ 'assets',
+ 'station-templates',
+ stationTemplateUrl.file
+ ),
+ };
+ await this.workerImplementation.addElement(workerData);
+ ++this.numberOfChargingStations;