-function startChargingStation(data: ChargingStationWorkerData): void {
- const station = new ChargingStation(data.index, data.templateFile);
- station.start();
+const startChargingStation = (data: ChargingStationWorkerData): void => {
+ new ChargingStation(data.index, data.templateFile).start();
+};
+
+class ChargingStationWorker extends AsyncResource {
+ constructor() {
+ super(moduleName);
+ // Add message listener to create and start charging station from the main thread
+ parentPort?.on('message', (message: WorkerMessage<ChargingStationWorkerData>) => {
+ if (message.id === WorkerMessageEvents.startWorkerElement) {
+ this.runInAsyncScope(
+ startChargingStation.bind(this) as (data: ChargingStationWorkerData) => void,
+ this,
+ message.data
+ );
+ }
+ });
+ }
+}
+
+export let chargingStationWorker: ChargingStationWorker | ThreadWorker<ChargingStationWorkerData>;
+if (Configuration.workerPoolInUse()) {
+ chargingStationWorker = new ThreadWorker<ChargingStationWorkerData>(startChargingStation, {
+ maxInactiveTime: WorkerConstants.POOL_MAX_INACTIVE_TIME,
+ });
+} else {
+ chargingStationWorker = new ChargingStationWorker();