fix: ensure firmware update simulation always run as async resource
[e-mobility-charging-stations-simulator.git] / src / charging-station / ui-server / UIServerFactory.ts
index cdcd251a5d45e8c5c8bd7175ab7519f4b83c5a6e..a5fb5a5d627c926e9d700c9ec34bbb273acd476d 100644 (file)
@@ -1,22 +1,32 @@
-import { AbstractUIServer } from './AbstractUIServer';
-import { ApplicationProtocol } from '../../types/UIProtocol';
-import Configuration from '../../utils/Configuration';
-import { ServerOptions } from '../../types/ConfigurationData';
-import UIWebSocketServer from './UIWebSocketServer';
+import chalk from 'chalk';
 
-export default class UIServerFactory {
+import type { AbstractUIServer } from './AbstractUIServer';
+import { UIHttpServer } from './UIHttpServer';
+import { UIServerUtils } from './UIServerUtils';
+import { UIWebSocketServer } from './UIWebSocketServer';
+import { ApplicationProtocol, type UIServerConfiguration } from '../../types';
+import { Configuration } from '../../utils';
+
+export class UIServerFactory {
   private constructor() {
     // This is intentional
   }
 
   public static getUIServerImplementation(
-    applicationProtocol: ApplicationProtocol,
-    options?: ServerOptions,
-    callback?: () => void
+    uiServerConfiguration?: UIServerConfiguration
   ): AbstractUIServer | null {
-    switch (applicationProtocol) {
+    if (UIServerUtils.isLoopback(uiServerConfiguration.options?.host) === false) {
+      console.warn(
+        chalk.yellow(
+          'Loopback address not detected in UI server configuration. This is not recommended.'
+        )
+      );
+    }
+    switch (uiServerConfiguration?.type ?? Configuration.getUIServer().type) {
       case ApplicationProtocol.WS:
-        return new UIWebSocketServer(options ?? Configuration.getUIServer().options, callback);
+        return new UIWebSocketServer(uiServerConfiguration ?? Configuration.getUIServer());
+      case ApplicationProtocol.HTTP:
+        return new UIHttpServer(uiServerConfiguration ?? Configuration.getUIServer());
       default:
         return null;
     }