1 import { ProtocolCommand
, ProtocolRequestHandler
} from
'../../types/UIProtocol';
3 import BaseError from
'../../exception/BaseError';
4 import { JsonObject
} from
'../../types/JsonType';
5 import UIWebSocketServer from
'../UIWebSocketServer';
6 import logger from
'../../utils/Logger';
8 export default abstract class AbstractUIService
{
9 protected readonly uiWebSocketServer
: UIWebSocketServer
;
10 protected readonly messageHandlers
: Map
<ProtocolCommand
, ProtocolRequestHandler
>;
12 constructor(uiWebSocketServer
: UIWebSocketServer
) {
13 this.uiWebSocketServer
= uiWebSocketServer
;
14 this.messageHandlers
= new Map
<ProtocolCommand
, ProtocolRequestHandler
>([
15 [ProtocolCommand
.LIST_CHARGING_STATIONS
, this.handleListChargingStations
.bind(this)],
19 public async messageHandler(command
: ProtocolCommand
, payload
: JsonObject
): Promise
<void> {
20 let messageResponse
: JsonObject
;
21 if (this.messageHandlers
.has(command
)) {
23 // Call the method to build the message response
24 messageResponse
= (await this.messageHandlers
.get(command
)(payload
)) as JsonObject
;
27 logger
.error(this.uiWebSocketServer
.logPrefix() + ' Handle message error: %j', error
);
33 `${command} is not implemented to handle message payload ${JSON.stringify(
40 // Send the built message response
41 this.uiWebSocketServer
.broadcastToClients(this.buildProtocolMessage(command
, messageResponse
));
44 protected buildProtocolMessage(command
: ProtocolCommand
, payload
: JsonObject
): string {
45 return JSON
.stringify([command
, payload
]);
48 private handleListChargingStations(): string[] {
49 return Array.from(this.uiWebSocketServer
.chargingStations
);