X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FStationWorker.ts;h=c3c5cb51346ce2f36f843f816c29eb27abbdb524;hb=6f9f188b8335f5cc9fcb0fe9ba2e72525b70231a;hp=8eac9e46ab2bc1c0aa7b15cd687bf1f53d971e53;hpb=5fdab605ce885d9a9fb21ac47c6d0766bd3673bb;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/StationWorker.ts b/src/charging-station/StationWorker.ts index 8eac9e46..c3c5cb51 100644 --- a/src/charging-station/StationWorker.ts +++ b/src/charging-station/StationWorker.ts @@ -1,26 +1,42 @@ -import { isMainThread, parentPort, workerData } from 'worker_threads'; +// Partial Copyright Jerome Benoit. 2021. All Rights Reserved. + +import { StationWorkerData, WorkerEvents } from '../types/Worker'; +import { parentPort, workerData } from 'worker_threads'; import ChargingStation from './ChargingStation'; import Constants from '../utils/Constants'; +import { ThreadWorker } from 'poolifier'; +import Utils from '../utils/Utils'; -if (!isMainThread) { - const station = new ChargingStation(workerData.index as number, workerData.templateFile as string); - station.start(); - - // Listener: start new charging station from main thread - addListener(); +// Conditionally export ThreadWorker instance for pool usage +export let threadWorker: ThreadWorker; +if (Utils.workerPoolInUse()) { + threadWorker = new ThreadWorker(startChargingStation, { maxInactiveTime: Constants.WORKER_POOL_MAX_INACTIVE_TIME, async: false }); +} else { + // Add message listener to start charging station from main thread + addMessageListener(); + if (!Utils.isUndefined(workerData)) { + startChargingStation({ index: workerData.index as number, templateFile: workerData.templateFile as string }); + } } -function addListener() { - parentPort.setMaxListeners(Constants.MAX_LISTENERS); - parentPort.on('message', (e) => { - if (e.id === Constants.START_CHARGING_STATION) { - startChargingStation(e.workerData); +/** + * Listen messages send by the main thread + */ +function addMessageListener(): void { + parentPort?.on('message', (message) => { + if (message.id === WorkerEvents.START_WORKER_ELEMENT) { + startChargingStation(message.workerData); } }); } -function startChargingStation(data: any) { - const station = new ChargingStation(data.index as number, data.templateFile as string); +/** + * Create and start a charging station instance + * + * @param {StationWorkerData} data workerData + */ +function startChargingStation(data: StationWorkerData): void { + const station = new ChargingStation(data.index, data.templateFile); station.start(); }