X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fworker%2Fabstract-worker.ts;h=428f63134f5666a13087ca564a22336236f00db2;hb=c62a9bbc12416e26acbb3b86b5090d6186b14b60;hp=a431f5a7fb0e9e72771dc848c0245fb775078854;hpb=209d7d1586c12f0c0e6faf58eb51b262464ecc60;p=poolifier.git diff --git a/src/worker/abstract-worker.ts b/src/worker/abstract-worker.ts index a431f5a7..428f6313 100644 --- a/src/worker/abstract-worker.ts +++ b/src/worker/abstract-worker.ts @@ -66,17 +66,17 @@ export abstract class AbstractWorker< * * @param type - The type of async event. * @param isMain - Whether this is the main worker or not. - * @param taskFunctions - Task function(s) processed by the worker when the pool's `execution` function is invoked. The first function is the default function. * @param mainWorker - Reference to main worker. + * @param taskFunctions - Task function(s) processed by the worker when the pool's `execution` function is invoked. The first function is the default function. * @param opts - Options for the worker. */ public constructor ( type: string, protected readonly isMain: boolean, + private readonly mainWorker: MainWorker, taskFunctions: | WorkerFunction | TaskFunctions, - protected readonly mainWorker: MainWorker, protected readonly opts: WorkerOptions = { /** * The kill behavior option on this worker or its default value. @@ -93,7 +93,7 @@ export abstract class AbstractWorker< this.checkWorkerOptions(this.opts) this.checkTaskFunctions(taskFunctions) if (!this.isMain) { - this.mainWorker?.on('message', this.messageListener.bind(this)) + this.getMainWorker()?.on('message', this.handleReadyMessage.bind(this)) } } @@ -284,17 +284,21 @@ export abstract class AbstractWorker< } } + /** + * Handles the ready message sent by the main worker. + * + * @param message - The ready message. + */ + protected abstract handleReadyMessage (message: MessageValue): void + /** * Worker message listener. * * @param message - The received message. */ - protected messageListener (message: MessageValue): void { + protected messageListener (message: MessageValue): void { if (message.workerId === this.id) { - if (message.ready != null) { - // Startup message received - this.sendReadyResponse() - } else if (message.statistics != null) { + if (message.statistics != null) { // Statistics message received this.statistics = message.statistics } else if (message.checkActive != null) { @@ -307,17 +311,19 @@ export abstract class AbstractWorker< this.run(message) } else if (message.kill === true) { // Kill message received - !this.isMain && this.stopCheckActive() - this.emitDestroy() + this.handleKillMessage(message) } } } /** - * Sends the ready response to the main worker. + * Handles a kill message sent by the main worker. + * + * @param message - The kill message. */ - protected sendReadyResponse (): void { - !this.isMain && this.sendToMainWorker({ ready: true, workerId: this.id }) + protected handleKillMessage (message: MessageValue): void { + !this.isMain && this.stopCheckActive() + this.emitDestroy() } /** @@ -328,7 +334,7 @@ export abstract class AbstractWorker< this.activeInterval = setInterval( this.checkActive.bind(this), (this.opts.maxInactiveTime ?? DEFAULT_MAX_INACTIVE_TIME) / 2 - ).unref() + ) } /** @@ -366,7 +372,7 @@ export abstract class AbstractWorker< } /** - * Sends a message to the main worker. + * Sends a message to main worker. * * @param message - The response message. */