import { EventEmitter } from 'node:events';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
-import { type Worker, isMainThread } from 'node:worker_threads';
+import { isMainThread } from 'node:worker_threads';
import chalk from 'chalk';
handleUnhandledRejection,
logger,
} from '../utils';
-import { type MessageHandler, type WorkerAbstract, WorkerFactory } from '../worker';
+import { type WorkerAbstract, WorkerFactory } from '../worker';
const moduleName = 'Bootstrap';
Constants.EMPTY_FREEZED_OBJECT
)
);
- await ChargingStationUtils.waitForChargingStationEvents(
- this,
- ChargingStationWorkerMessageEvents.stopped,
- this.numberOfChargingStations
- );
+ await Promise.race([
+ ChargingStationUtils.waitForChargingStationEvents(
+ this,
+ ChargingStationWorkerMessageEvents.stopped,
+ this.numberOfChargingStations
+ ),
+ new Promise<string>((resolve) => {
+ setTimeout(() => {
+ const message = `Timeout reached ${Utils.formatDurationMilliSeconds(
+ Constants.STOP_SIMULATOR_TIMEOUT
+ )} at stopping charging stations simulator`;
+ console.warn(chalk.yellow(message));
+ resolve(message);
+ }, Constants.STOP_SIMULATOR_TIMEOUT);
+ }),
+ ]);
await this.workerImplementation?.stop();
this.workerImplementation = null;
this.uiServer?.stop();
elementsPerWorker: Configuration.getWorker().elementsPerWorker,
poolOptions: {
workerChoiceStrategy: Configuration.getWorker().poolStrategy,
+ messageHandler: this.messageHandler.bind(this) as (message: unknown) => void,
},
- messageHandler: this.messageHandler.bind(this) as MessageHandler<Worker>,
}
));
}