- private getLastWorkerSetElement(): WorkerSetElement {
- let workerSetElement: WorkerSetElement;
- // eslint-disable-next-line no-empty
- for (workerSetElement of this.workerSet) { /* This is intentional */ }
+ /**
+ * Adds a new `WorkerSetElement`.
+ */
+ private addWorkerSetElement(): WorkerSetElement {
+ const worker = new Worker(this.workerScript, {
+ env: SHARE_ENV,
+ ...this.workerOptions.poolOptions.workerOptions,
+ });
+ worker.on(
+ 'message',
+ this.workerOptions?.poolOptions?.messageHandler ?? WorkerConstants.EMPTY_FUNCTION
+ );
+ worker.on(
+ 'error',
+ this.workerOptions?.poolOptions?.errorHandler ?? WorkerConstants.EMPTY_FUNCTION
+ );
+ worker.on('error', (error) => {
+ if (this.emitter !== undefined) {
+ this.emitter.emit(WorkerSetEvents.error, error);
+ }
+ if (this.workerOptions?.poolOptions?.restartWorkerOnError) {
+ this.addWorkerSetElement();
+ }
+ });
+ worker.on(
+ 'online',
+ this.workerOptions?.poolOptions?.onlineHandler ?? WorkerConstants.EMPTY_FUNCTION
+ );
+ worker.on(
+ 'exit',
+ this.workerOptions?.poolOptions?.exitHandler ?? WorkerConstants.EMPTY_FUNCTION
+ );
+ worker.once('exit', () => this.workerSet.delete(this.getWorkerSetElementByWorker(worker)));
+ const workerSetElement: WorkerSetElement = { worker, numberOfWorkerElements: 0 };
+ this.workerSet.add(workerSetElement);