Add dynamic worker choice strategy change at runtime
[poolifier.git] / src / pools / pool-worker.ts
CommitLineData
bdaf31cd
JB
1import type { Worker as ClusterWorker } from 'cluster'
2import type { Worker as WorkerThread } from 'worker_threads'
3import type { Draft } from '../utility-types'
4
5/**
6 * Poolifier supported worker type.
7 */
8export type WorkerType = WorkerThread & ClusterWorker & Draft<MessageChannel>
9
10/**
11 * Callback invoked if the worker has received a message.
12 */
13export type MessageHandler<Worker> = (this: Worker, m: unknown) => void
14
15/**
16 * Callback invoked if the worker raised an error.
17 */
18export type ErrorHandler<Worker> = (this: Worker, e: Error) => void
19
20/**
21 * Callback invoked when the worker has started successfully.
22 */
23export type OnlineHandler<Worker> = (this: Worker) => void
24
25/**
26 * Callback invoked when the worker exits successfully.
27 */
28export type ExitHandler<Worker> = (this: Worker, code: number) => void
29
30/**
31 * Basic interface that describes the minimum required implementation of listener events for a pool worker.
32 */
33export interface IPoolWorker {
34 /**
35 * Worker identifier.
36 */
37 readonly id?: number
38 /**
39 * Register a listener to the message event.
40 *
41 * @param event `'message'`.
42 * @param handler The message handler.
43 */
44 on(event: 'message', handler: MessageHandler<this>): void
45 /**
46 * Register a listener to the error event.
47 *
48 * @param event `'error'`.
49 * @param handler The error handler.
50 */
51 on(event: 'error', handler: ErrorHandler<this>): void
52 /**
53 * Register a listener to the online event.
54 *
55 * @param event `'online'`.
56 * @param handler The online handler.
57 */
58 on(event: 'online', handler: OnlineHandler<this>): void
59 /**
60 * Register a listener to the exit event.
61 *
62 * @param event `'exit'`.
63 * @param handler The exit handler.
64 */
65 on(event: 'exit', handler: ExitHandler<this>): void
66 /**
67 * Register a listener to the exit event that will only performed once.
68 *
69 * @param event `'exit'`.
70 * @param handler The exit handler.
71 */
72 once(event: 'exit', handler: ExitHandler<this>): void
73}