12cc7c735f257ed624c8de35d5198865361edec7
[e-mobility-charging-stations-simulator.git] / src / worker / WorkerAbstract.ts
1 import { WorkerData, WorkerOptions } from '../types/Worker';
2
3 import Constants from '../utils/Constants';
4
5 export default abstract class WorkerAbstract<T extends WorkerData> {
6 protected readonly workerScript: string;
7 protected readonly workerOptions: WorkerOptions;
8 public abstract readonly size: number;
9 public abstract readonly maxElementsPerWorker: number | null;
10
11 /**
12 * `WorkerAbstract` constructor.
13 *
14 * @param workerScript
15 * @param workerOptions
16 */
17 constructor(workerScript: string, workerOptions: WorkerOptions = {
18 workerStartDelay: Constants.WORKER_START_DELAY,
19 elementStartDelay: Constants.ELEMENT_START_DELAY,
20 poolMinSize: Constants.DEFAULT_WORKER_POOL_MIN_SIZE,
21 poolMaxSize: Constants.DEFAULT_WORKER_POOL_MAX_SIZE,
22 elementsPerWorker: Constants.DEFAULT_CHARGING_STATIONS_PER_WORKER,
23 poolOptions: {},
24 messageHandler: () => { /* This is intentional */ }
25 }) {
26 this.workerScript = workerScript;
27 this.workerOptions = workerOptions;
28 }
29
30 public abstract start(): Promise<void>;
31 public abstract stop(): Promise<void>;
32 public abstract addElement(elementData: T): Promise<void>;
33 }