49f088377c514f1d90059436fa11aef6cb6695c0
[e-mobility-charging-stations-simulator.git] / src / charging-station / ui-server / UIServerFactory.ts
1 import chalk from 'chalk';
2
3 import type { AbstractUIServer } from './AbstractUIServer';
4 import { UIHttpServer } from './UIHttpServer';
5 import { UIServerUtils } from './UIServerUtils';
6 import { UIWebSocketServer } from './UIWebSocketServer';
7 import {
8 ApplicationProtocol,
9 ApplicationProtocolVersion,
10 type UIServerConfiguration,
11 } from '../../types';
12 import { isUndefined } from '../../utils';
13
14 export class UIServerFactory {
15 private constructor() {
16 // This is intentional
17 }
18
19 public static getUIServerImplementation(
20 uiServerConfiguration: UIServerConfiguration,
21 ): AbstractUIServer | null {
22 if (UIServerUtils.isLoopback(uiServerConfiguration.options!.host!) === false) {
23 console.warn(
24 chalk.yellow(
25 'Loopback address not detected in UI server configuration. This is not recommended.',
26 ),
27 );
28 }
29 uiServerConfiguration = {
30 ...(uiServerConfiguration.type === ApplicationProtocol.HTTP &&
31 isUndefined(uiServerConfiguration.version) && {
32 version: ApplicationProtocolVersion.VERSION_11,
33 }),
34 ...uiServerConfiguration,
35 };
36 switch (uiServerConfiguration.type) {
37 case ApplicationProtocol.WS:
38 return new UIWebSocketServer(uiServerConfiguration);
39 case ApplicationProtocol.HTTP:
40 return new UIHttpServer(uiServerConfiguration);
41 default:
42 return null;
43 }
44 }
45 }