- private startWorker(): void {
- const worker = new Worker(this.workerScript);
- worker.on(
- 'message',
- (this.workerOptions?.messageHandler ?? WorkerConstants.EMPTY_FUNCTION).bind(
- this
- ) as MessageHandler<Worker>
+ private addWorkerSetElement(): WorkerSetElement {
+ const worker = new Worker(this.workerScript, {
+ env: SHARE_ENV,
+ ...this.workerOptions.poolOptions?.workerOptions,
+ });
+ worker.on('message', this.workerOptions.poolOptions?.messageHandler ?? EMPTY_FUNCTION);
+ worker.on('message', (message: WorkerMessage<WorkerData>) => {
+ if (message.event === WorkerMessageEvents.startedWorkerElement) {
+ this.emitter?.emit(WorkerSetEvents.elementStarted, this.info);
+ } else if (message.event === WorkerMessageEvents.startWorkerElementError) {
+ this.emitter?.emit(WorkerSetEvents.elementError, message.data);
+ }
+ });
+ worker.on('error', this.workerOptions.poolOptions?.errorHandler ?? EMPTY_FUNCTION);
+ worker.on('error', (error) => {
+ this.emitter?.emit(WorkerSetEvents.error, error);
+ if (this.workerOptions.poolOptions?.restartWorkerOnError) {
+ this.addWorkerSetElement();
+ }
+ });
+ worker.on('online', this.workerOptions.poolOptions?.onlineHandler ?? EMPTY_FUNCTION);
+ worker.on('exit', this.workerOptions.poolOptions?.exitHandler ?? EMPTY_FUNCTION);
+ worker.once('exit', () =>
+ this.removeWorkerSetElement(this.getWorkerSetElementByWorker(worker)!),