Add dynamic worker choice strategy change at runtime
[poolifier.git] / src / pools / selection-strategies / round-robin-worker-choice-strategy.ts
1 import type { AbstractPoolWorker } from '../abstract-pool-worker'
2 import { AbstractWorkerChoiceStrategy } from './abstract-worker-choice-strategy'
3
4 /**
5 * Selects the next worker in a round robin fashion.
6 *
7 * @template Worker Type of worker which manages the strategy.
8 * @template Data Type of data sent to the worker. This can only be serializable data.
9 * @template Response Type of response of execution. This can only be serializable data.
10 */
11 export class RoundRobinWorkerChoiceStrategy<
12 Worker extends AbstractPoolWorker,
13 Data,
14 Response
15 > extends AbstractWorkerChoiceStrategy<Worker, Data, Response> {
16 /**
17 * Index for the next worker.
18 */
19 private nextWorkerIndex: number = 0
20
21 /** @inheritdoc */
22 public choose (): Worker {
23 const chosenWorker = this.pool.workers[this.nextWorkerIndex]
24 this.nextWorkerIndex =
25 this.nextWorkerIndex === this.pool.workers.length - 1
26 ? 0
27 : this.nextWorkerIndex + 1
28 return chosenWorker
29 }
30 }