X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Fabstract-pool.ts;h=c951c6f23792ea631b8804e11c7ff25719ce5fa5;hb=17a9a09416d6c07f560eb0c79bd031d8c0125d4e;hp=4a6ba72f4b7523bd2d8870dd1108c6225814ff16;hpb=85a3f8a7b3087e7240c1d307ba6dd78c05883f83;p=poolifier.git diff --git a/src/pools/abstract-pool.ts b/src/pools/abstract-pool.ts index 4a6ba72f..c951c6f2 100644 --- a/src/pools/abstract-pool.ts +++ b/src/pools/abstract-pool.ts @@ -2,6 +2,13 @@ import EventEmitter from 'events' import type { MessageValue } from '../utility-types' import type { IPool } from './pool' +/** + * An intentional empty function. + */ +function emptyFunction () { + // intentionally left blank +} + /** * Callback invoked if the worker raised an error. */ @@ -142,10 +149,7 @@ export abstract class AbstractPool< if (!this.isMain()) { throw new Error('Cannot start a pool from a worker!') } - // TODO christopher 2021-02-07: Improve this check e.g. with a pattern or blank check - if (!this.filePath) { - throw new Error('Please specify a file with a worker implementation') - } + this.checkFilePath(this.filePath) this.setupHook() for (let i = 1; i <= this.numberOfWorkers; i++) { @@ -155,6 +159,12 @@ export abstract class AbstractPool< this.emitter = new PoolEmitter() } + private checkFilePath (filePath: string) { + if (!filePath) { + throw new Error('Please specify a file with a worker implementation') + } + } + /** * Perform the task specified in the constructor with the data parameter. * @@ -201,26 +211,31 @@ export abstract class AbstractPool< /** * Increase the number of tasks that the given workers has done. * - * @param worker Workers whose tasks are increased. + * @param worker Worker whose tasks are increased. */ protected increaseWorkersTask (worker: Worker): void { - const numberOfTasksInProgress = this.tasks.get(worker) - if (numberOfTasksInProgress !== undefined) { - this.tasks.set(worker, numberOfTasksInProgress + 1) - } else { - throw Error('Worker could not be found in tasks map') - } + this.stepWorkerNumberOfTasks(worker, 1) } /** * Decrease the number of tasks that the given workers has done. * - * @param worker Workers whose tasks are decreased. + * @param worker Worker whose tasks are decreased. */ protected decreaseWorkersTasks (worker: Worker): void { + this.stepWorkerNumberOfTasks(worker, -1) + } + + /** + * Step the number of tasks that the given workers has done. + * + * @param worker Worker whose tasks are set. + * @param step Worker number of tasks step. + */ + private stepWorkerNumberOfTasks (worker: Worker, step: number) { const numberOfTasksInProgress = this.tasks.get(worker) if (numberOfTasksInProgress !== undefined) { - this.tasks.set(worker, numberOfTasksInProgress - 1) + this.tasks.set(worker, numberOfTasksInProgress + step) } else { throw Error('Worker could not be found in tasks map') } @@ -312,9 +327,9 @@ export abstract class AbstractPool< protected createAndSetupWorker (): Worker { const worker: Worker = this.createWorker() - worker.on('error', this.opts.errorHandler ?? (() => {})) - worker.on('online', this.opts.onlineHandler ?? (() => {})) - worker.on('exit', this.opts.exitHandler ?? (() => {})) + worker.on('error', this.opts.errorHandler ?? emptyFunction) + worker.on('online', this.opts.onlineHandler ?? emptyFunction) + worker.on('exit', this.opts.exitHandler ?? emptyFunction) worker.once('exit', () => this.removeWorker(worker)) this.workers.push(worker)