fix: untangle worker set message from application message
[e-mobility-charging-stations-simulator.git] / src / worker / WorkerTypes.ts
index 7bcb108e9a5fe3c89722956e19103ed1e77d9b96..e1e89a7cde183ac99841b55fdc67b04ad0839329 100644 (file)
@@ -1,52 +1,70 @@
-import type { Worker } from 'node:worker_threads';
+import type { Worker } from 'node:worker_threads'
 
-import { type PoolEvent, PoolEvents, type ThreadPoolOptions } from 'poolifier';
+import { type PoolEvent, PoolEvents, type ThreadPoolOptions } from 'poolifier'
 
 export enum WorkerProcessType {
   workerSet = 'workerSet',
-  dynamicPool = 'dynamicPool',
-  staticPool = 'staticPool',
+  fixedPool = 'fixedPool',
+  /** @experimental */
+  dynamicPool = 'dynamicPool'
 }
 
-export type SetInfo = {
-  type: string;
-  worker: string;
-  size: number;
-  elementsExecuting: number;
-  elementsPerWorker: number;
-};
+export interface SetInfo {
+  version: string
+  type: string
+  worker: string
+  started: boolean
+  size: number
+  elementsExecuting: number
+  elementsPerWorker: number
+}
 
 export enum WorkerSetEvents {
+  started = 'started',
+  stopped = 'stopped',
   error = 'error',
+  elementAdded = 'elementAdded',
+  elementError = 'elementError'
 }
 
 export const WorkerEvents = {
   ...PoolEvents,
-  ...WorkerSetEvents,
-} as const;
-export type WorkerEvents = PoolEvent | WorkerSetEvents;
-
-export type WorkerOptions = {
-  workerStartDelay?: number;
-  elementStartDelay?: number;
-  poolMaxSize: number;
-  poolMinSize: number;
-  elementsPerWorker?: number;
-  poolOptions?: ThreadPoolOptions;
-};
-
-export type WorkerData = Record<string, unknown>;
-
-export type WorkerSetElement = {
-  worker: Worker;
-  numberOfWorkerElements: number;
-};
-
-export type WorkerMessage<T extends WorkerData> = {
-  id: WorkerMessageEvents;
-  data: T;
-};
+  ...WorkerSetEvents
+} as const
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export type WorkerEvents = PoolEvent | WorkerSetEvents
+
+export interface WorkerOptions {
+  workerStartDelay?: number
+  elementAddDelay?: number
+  poolMaxSize: number
+  poolMinSize: number
+  elementsPerWorker?: number
+  poolOptions?: ThreadPoolOptions
+}
+
+export type WorkerData = Record<string, unknown>
+
+export interface WorkerSetElement {
+  worker: Worker
+  numberOfWorkerElements: number
+}
+
+export interface WorkerMessage<T extends WorkerData> {
+  uuid: `${string}-${string}-${string}-${string}`
+  event: WorkerMessageEvents
+  data: T
+}
 
 export enum WorkerMessageEvents {
-  startWorkerElement = 'startWorkerElement',
+  addWorkerElement = 'addWorkerElement',
+  addedWorkerElement = 'addedWorkerElement',
+  workerElementError = 'workerElementError'
+}
+
+export interface WorkerDataError extends WorkerData {
+  event: WorkerMessageEvents
+  name: string
+  message: string
+  stack?: string
 }