X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FStationWorker.ts;h=31452ce0149225884e64d92943625fe775e0102a;hb=aa8b492ae49c88a4f26d1c2a62463e46564bf355;hp=68c3ea24c0f96c4def2f5c187050bd5e816dc04b;hpb=ad3de6c4ec07b788fe1c84a40081902c3abc5b3b;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/StationWorker.ts b/src/charging-station/StationWorker.ts index 68c3ea24..31452ce0 100644 --- a/src/charging-station/StationWorker.ts +++ b/src/charging-station/StationWorker.ts @@ -1,8 +1,34 @@ -import { isMainThread, workerData } from 'worker_threads'; +import { StationWorkerData, WorkerEvents } from '../types/Worker'; +import { isMainThread, parentPort, workerData } from 'worker_threads'; import ChargingStation from './ChargingStation'; +import Constants from '../utils/Constants'; +import { ThreadWorker } from 'poolifier'; +import Utils from '../utils/Utils'; + +// Conditionally export ThreadWorker instance for pool usage +export let threadWorker; +if (Utils.workerPoolInUse()) { + threadWorker = new ThreadWorker(startChargingStation, { maxInactiveTime: Constants.WORKER_POOL_MAX_INACTIVE_TIME, async: false }); +} if (!isMainThread) { - const station = new ChargingStation(workerData.index as number, workerData.templateFile as string); + // Add listener to start charging station from main thread + addListener(); + if (!Utils.isUndefined(workerData)) { + startChargingStation({ index: workerData.index as number, templateFile: workerData.templateFile as string }); + } +} + +function addListener(): void { + parentPort.on('message', (message) => { + if (message.id === WorkerEvents.START_WORKER_ELEMENT) { + startChargingStation(message.workerData); + } + }); +} + +function startChargingStation(data: StationWorkerData): void { + const station = new ChargingStation(data.index , data.templateFile); station.start(); }