1 // Partial Copyright Jerome Benoit. 2021-2024. All Rights Reserved.
3 import { parentPort
} from
'node:worker_threads'
5 import { ThreadWorker
} from
'poolifier'
7 import { ChargingStation
} from
'./ChargingStation.js'
8 import { BaseError
} from
'../exception/index.js'
11 ChargingStationWorkerData
,
12 ChargingStationWorkerEventError
,
13 ChargingStationWorkerMessage
14 } from
'../types/index.js'
15 import { Configuration
, buildChargingStationDataPayload
} from
'../utils/index.js'
16 import { type WorkerMessage
, WorkerMessageEvents
} from
'../worker/index.js'
18 export let chargingStationWorker
: object
19 if (Configuration
.workerPoolInUse()) {
20 chargingStationWorker
= new ThreadWorker
<ChargingStationWorkerData
>(
21 (data
?: ChargingStationWorkerData
): void => {
22 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, no-new
23 new ChargingStation(data
!.index
, data
!.templateFile
, data
!.options
)
27 // eslint-disable-next-line @typescript-eslint/no-extraneous-class
28 class ChargingStationWorker
<Data
extends ChargingStationWorkerData
> {
30 parentPort
?.on('message', (message
: WorkerMessage
<Data
>) => {
31 switch (message
.event
) {
32 case WorkerMessageEvents
.addWorkerElement
:
34 const chargingStation
= new ChargingStation(
36 message
.data
.templateFile
,
39 parentPort
?.postMessage({
40 event
: WorkerMessageEvents
.addedWorkerElement
,
41 data
: buildChargingStationDataPayload(chargingStation
)
42 } satisfies ChargingStationWorkerMessage
<ChargingStationData
>)
44 parentPort
?.postMessage({
45 event
: WorkerMessageEvents
.workerElementError
,
47 event
: WorkerMessageEvents
.addWorkerElement
,
48 name
: (error
as Error).name
,
49 message
: (error
as Error).message
,
50 stack
: (error
as Error).stack
52 } satisfies ChargingStationWorkerMessage
<ChargingStationWorkerEventError
>)
57 `Unknown worker event: '${message.event}' received with data: '${JSON.stringify(
67 chargingStationWorker
= new ChargingStationWorker
<ChargingStationWorkerData
>()