import { ThreadWorker } from 'poolifier';
import { ChargingStation } from './ChargingStation';
+import { BaseError } from '../exception';
import type { ChargingStationWorkerData } from '../types';
import { Configuration } from '../utils';
-import { WorkerConstants, type WorkerMessage, WorkerMessageEvents } from '../worker';
+import { type WorkerMessage, WorkerMessageEvents } from '../worker';
const moduleName = 'ChargingStationWorker';
super(moduleName);
// Add message listener to create and start charging station from the main thread
parentPort?.on('message', (message: WorkerMessage<ChargingStationWorkerData>) => {
- if (message.event === WorkerMessageEvents.startWorkerElement) {
- try {
- this.runInAsyncScope(
- startChargingStation.bind(this) as (data?: ChargingStationWorkerData) => void,
- this,
- message.data,
+ switch (message.event) {
+ case WorkerMessageEvents.startWorkerElement:
+ try {
+ this.runInAsyncScope(
+ startChargingStation.bind(this) as (data?: ChargingStationWorkerData) => void,
+ this,
+ message.data,
+ );
+ parentPort?.postMessage({
+ event: WorkerMessageEvents.startedWorkerElement,
+ });
+ } catch (error) {
+ parentPort?.postMessage({
+ event: WorkerMessageEvents.startWorkerElementError,
+ data: {
+ message: (error as Error).message,
+ stack: (error as Error).stack,
+ },
+ });
+ }
+ break;
+ default:
+ throw new BaseError(
+ `Unknown worker event: '${message.event}' received with data: '${JSON.stringify(
+ message.data,
+ undefined,
+ 2,
+ )}'`,
);
- parentPort?.postMessage({
- event: WorkerMessageEvents.startedWorkerElement,
- });
- } catch (error) {
- parentPort?.postMessage({
- event: WorkerMessageEvents.startWorkerElementError,
- data: {
- message: (error as Error).message,
- stack: (error as Error).stack,
- },
- });
- }
}
});
}
export let chargingStationWorker: ChargingStationWorker | ThreadWorker<ChargingStationWorkerData>;
if (Configuration.workerPoolInUse()) {
- chargingStationWorker = new ThreadWorker<ChargingStationWorkerData>(startChargingStation, {
- maxInactiveTime: WorkerConstants.POOL_MAX_INACTIVE_TIME,
- });
+ chargingStationWorker = new ThreadWorker<ChargingStationWorkerData>(startChargingStation);
} else {
chargingStationWorker = new ChargingStationWorker();
}