refactor(simulator): factor out data transfer response
[e-mobility-charging-stations-simulator.git] / src / charging-station / Bootstrap.ts
index 653a8ddbc1f85fdcd84b29a47b278e44864385bf..3312224278521fe7e98fc128b58c2ad5bc887fb6 100644 (file)
@@ -6,7 +6,8 @@ import { type Worker, isMainThread } from 'node:worker_threads';
 
 import chalk from 'chalk';
 
-import { type AbstractUIServer, ChargingStationUtils, UIServerFactory } from './internal';
+import type { AbstractUIServer } from './ui-server/AbstractUIServer';
+import { UIServerFactory } from './ui-server/UIServerFactory';
 import packageJson from '../../package.json' assert { type: 'json' };
 import { BaseError } from '../exception';
 import { type Storage, StorageFactory } from '../performance';
@@ -19,7 +20,7 @@ import {
   type StationTemplateUrl,
   type Statistics,
 } from '../types';
-import { Configuration, Utils, logger } from '../utils';
+import { Configuration, ErrorUtils, Utils, logger } from '../utils';
 import { type MessageHandler, type WorkerAbstract, WorkerFactory } from '../worker';
 
 const moduleName = 'Bootstrap';
@@ -44,15 +45,14 @@ export class Bootstrap {
 
   private constructor() {
     // Enable unconditionally for now
-    this.logUnhandledRejection();
-    this.logUncaughtException();
+    ErrorUtils.handleUnhandledRejection();
+    ErrorUtils.handleUncaughtException();
     this.initializedCounters = false;
     this.started = false;
     this.initializeCounters();
     this.workerImplementation = null;
     this.workerScript = path.join(
-      path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../'),
-      'charging-station',
+      path.dirname(fileURLToPath(import.meta.url)),
       `ChargingStationWorker${path.extname(fileURLToPath(import.meta.url))}`
     );
     Configuration.getUIServer().enabled === true &&
@@ -101,11 +101,11 @@ export class Bootstrap {
           `Charging stations simulator ${
             this.version
           } started with ${this.numberOfChargingStations.toString()} charging station(s) from ${this.numberOfChargingStationTemplates.toString()} configured charging station template(s) and ${
-            ChargingStationUtils.workerDynamicPoolInUse()
+            Configuration.workerDynamicPoolInUse()
               ? `${Configuration.getWorker().poolMinSize?.toString()}/`
               : ''
           }${this.workerImplementation?.size}${
-            ChargingStationUtils.workerPoolInUse()
+            Configuration.workerPoolInUse()
               ? `/${Configuration.getWorker().poolMaxSize?.toString()}`
               : ''
           } worker(s) concurrently running in '${Configuration.getWorker().processType}' mode${
@@ -256,18 +256,6 @@ export class Bootstrap {
     }
   }
 
-  private logUncaughtException(): void {
-    process.on('uncaughtException', (error: Error) => {
-      console.error(chalk.red('Uncaught exception: '), error);
-    });
-  }
-
-  private logUnhandledRejection(): void {
-    process.on('unhandledRejection', (reason: unknown) => {
-      console.error(chalk.red('Unhandled rejection: '), reason);
-    });
-  }
-
   private async startChargingStation(
     index: number,
     stationTemplateUrl: StationTemplateUrl
@@ -275,7 +263,7 @@ export class Bootstrap {
     await this.workerImplementation?.addElement({
       index,
       templateFile: path.join(
-        path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../'),
+        path.dirname(fileURLToPath(import.meta.url)),
         'assets',
         'station-templates',
         stationTemplateUrl.file