+ /**
+ * Registers a listener callback on a given worker.
+ *
+ * @param worker - The worker which should register a listener.
+ * @param listener - The message listener callback.
+ */
+ protected abstract registerWorkerMessageListener<
+ Message extends Data | Response
+ >(worker: Worker, listener: (message: MessageValue<Message>) => void): void
+
+ /**
+ * Returns a newly created worker.
+ */
+ protected abstract createWorker (): Worker
+
+ /**
+ * Function that can be hooked up when a worker has been newly created and moved to the workers registry.
+ *
+ * Can be used to update the `maxListeners` or binding the `main-worker`\<-\>`worker` connection if not bind by default.
+ *
+ * @param worker - The newly created worker.
+ */
+ protected abstract afterWorkerSetup (worker: Worker): void
+
+ /**
+ * Creates a new worker for this pool and sets it up completely.
+ *
+ * @returns New, completely set up worker.
+ */
+ protected createAndSetupWorker (): Worker {
+ const worker = this.createWorker()
+
+ worker.on('message', this.opts.messageHandler ?? EMPTY_FUNCTION)
+ worker.on('error', this.opts.errorHandler ?? EMPTY_FUNCTION)
+ worker.on('online', this.opts.onlineHandler ?? EMPTY_FUNCTION)
+ worker.on('exit', this.opts.exitHandler ?? EMPTY_FUNCTION)
+ worker.once('exit', () => {
+ this.removeWorker(worker)
+ })
+
+ this.pushWorker(worker, {
+ run: 0,
+ running: 0,
+ runTime: 0,
+ avgRunTime: 0,
+ error: 0
+ })