Sin descripción

ChargingStationWorker.ts 2.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // Partial Copyright Jerome Benoit. 2021-2024. All Rights Reserved.
  2. import { parentPort } from 'node:worker_threads'
  3. import { ThreadWorker } from 'poolifier'
  4. import type { ChargingStationInfo, ChargingStationWorkerData } from '../types/index.js'
  5. import { BaseError } from '../exception/index.js'
  6. import { Configuration } from '../utils/index.js'
  7. import { type WorkerDataError, type WorkerMessage, WorkerMessageEvents } from '../worker/index.js'
  8. import { ChargingStation } from './ChargingStation.js'
  9. export let chargingStationWorker: object
  10. if (Configuration.workerPoolInUse()) {
  11. chargingStationWorker = new ThreadWorker<
  12. ChargingStationWorkerData,
  13. ChargingStationInfo | undefined
  14. >((data?: ChargingStationWorkerData): ChargingStationInfo | undefined => {
  15. // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
  16. const { index, options, templateFile } = data!
  17. return new ChargingStation(index, templateFile, options).stationInfo
  18. })
  19. } else {
  20. // eslint-disable-next-line @typescript-eslint/no-extraneous-class
  21. class ChargingStationWorker<Data extends ChargingStationWorkerData> {
  22. constructor () {
  23. parentPort?.on('message', (message: WorkerMessage<Data>) => {
  24. const { data, event, uuid } = message
  25. // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
  26. if (uuid != null) {
  27. switch (event) {
  28. case WorkerMessageEvents.addWorkerElement:
  29. try {
  30. const chargingStation = new ChargingStation(
  31. data.index,
  32. data.templateFile,
  33. data.options
  34. )
  35. parentPort?.postMessage({
  36. // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
  37. data: chargingStation.stationInfo!,
  38. event: WorkerMessageEvents.addedWorkerElement,
  39. uuid,
  40. } satisfies WorkerMessage<ChargingStationInfo>)
  41. } catch (error) {
  42. parentPort?.postMessage({
  43. data: {
  44. event,
  45. message: (error as Error).message,
  46. name: (error as Error).name,
  47. stack: (error as Error).stack,
  48. },
  49. event: WorkerMessageEvents.workerElementError,
  50. uuid,
  51. } satisfies WorkerMessage<WorkerDataError>)
  52. }
  53. break
  54. default:
  55. throw new BaseError(
  56. `Unknown worker message event: '${event}' received with data: '${JSON.stringify(
  57. data,
  58. undefined,
  59. 2
  60. )}'`
  61. )
  62. }
  63. }
  64. })
  65. }
  66. }
  67. chargingStationWorker = new ChargingStationWorker<ChargingStationWorkerData>()
  68. }