f2db451240135a182d0921cac1bcc28c9a19f121
[e-mobility-charging-stations-simulator.git] / src / charging-station / WebSocketServices / ui / 0.0.1 / UIService.ts
1 import { ProtocolCommand, ProtocolRequestHandler, ProtocolVersion } from '../../../../types/UIProtocol';
2
3 import AbstractUIService from '../AbstractUIService';
4 import BaseError from '../../../../exception/BaseError';
5 import WebSocketServer from '../../../WebSocketServer';
6 import logger from '../../../../utils/Logger';
7
8 export default class UIService extends AbstractUIService {
9 private readonly messageHandlers: Map<ProtocolCommand, ProtocolRequestHandler>;
10
11 constructor(webSocketServer: WebSocketServer) {
12 super(webSocketServer);
13 this.messageHandlers = new Map<ProtocolCommand, ProtocolRequestHandler>([
14 [ProtocolCommand.LIST_CHARGING_STATIONS, this.handleListChargingStations.bind(this)],
15 [ProtocolCommand.START_TRANSACTION, this.handleStartTransaction.bind(this)],
16 [ProtocolCommand.STOP_TRANSACTION, this.handleStopTransaction.bind(this)],
17 ]);
18 }
19
20 async handleMessage(version: ProtocolVersion, command: ProtocolCommand, payload: Record<string, unknown>): Promise<void> {
21 let messageResponse: Record<string, unknown>;
22 if (this.messageHandlers.has(command) && command !== ProtocolCommand.UNKNOWN) {
23 try {
24 // Call the method to build the response
25 messageResponse = await this.messageHandlers.get(command)(payload);
26 } catch (error) {
27 // Log
28 logger.error(this.webSocketServer.logPrefix() + ' Handle message error: %j', error);
29 throw error;
30 }
31 } else {
32 // Throw exception
33 throw new BaseError(`${command} is not implemented to handle message payload ${JSON.stringify(payload, null, 2)}`);
34 }
35 // Send the built response
36 this.webSocketServer.broadcastToClients(this.buildProtocolMessage(version, command, messageResponse));
37 }
38
39 private handleListChargingStations(payload: Record<string, unknown>) {
40 return this.chargingStations;
41 }
42
43 private handleStartTransaction(payload: Record<string, unknown>) { }
44 private handleStopTransaction(payload: Record<string, unknown>) { }
45 }