+import { WorkerData, WorkerStartOptions } from '../types/Worker';
+
import Constants from '../utils/Constants';
-import { WorkerData } from '../types/Worker';
-export default abstract class WorkerAbstract {
+export default abstract class WorkerAbstract<T extends WorkerData> {
protected readonly workerScript: string;
protected readonly workerStartDelay: number;
- protected readonly messageListener: (message: any) => void;
- public abstract size: number;
- public abstract maxElementsPerWorker: number | null;
+ protected readonly elementStartDelay: number;
+ public abstract readonly size: number;
+ public abstract readonly maxElementsPerWorker: number | null;
/**
* `WorkerAbstract` constructor.
*
* @param workerScript
- * @param workerStartDelay
- * @param messageListenerCallback
+ * @param workerStartOptions
*/
- constructor(workerScript: string, workerStartDelay: number = Constants.WORKER_START_DELAY,
- messageListenerCallback: (message: any) => void = () => { /* This is intentional */ }) {
+ constructor(workerScript: string, workerStartOptions: WorkerStartOptions = {
+ workerStartDelay: Constants.WORKER_START_DELAY,
+ elementStartDelay: Constants.ELEMENT_START_DELAY
+ }) {
this.workerScript = workerScript;
- this.workerStartDelay = workerStartDelay;
- this.messageListener = messageListenerCallback;
+ this.workerStartDelay = workerStartOptions.workerStartDelay;
+ this.elementStartDelay = workerStartOptions.elementStartDelay;
}
public abstract start(): Promise<void>;
public abstract stop(): Promise<void>;
- public abstract addElement(elementData: WorkerData): Promise<void>;
+ public abstract addElement(elementData: T): Promise<void>;
}