1 import { ProtocolCommand
, ProtocolRequestHandler
} from
'../../../../types/UIProtocol';
3 import AbstractUIService from
'../AbstractUIService';
4 import BaseError from
'../../../../exception/BaseError';
5 import WebSocketServer from
'../../../WebSocketServer';
6 import logger from
'../../../../utils/Logger';
8 export default class UIService
extends AbstractUIService
{
9 private readonly messageHandlers
: Map
<ProtocolCommand
, ProtocolRequestHandler
>;
11 constructor(webSocketServer
: WebSocketServer
) {
12 super(webSocketServer
);
13 this.messageHandlers
= new Map
<ProtocolCommand
, ProtocolRequestHandler
>([
14 [ProtocolCommand
.START_TRANSACTION
, this.handleStartTransaction
.bind(this)],
15 [ProtocolCommand
.STOP_TRANSACTION
, this.handleStopTransaction
.bind(this)],
19 async handleMessage(command
: ProtocolCommand
, payload
: Record
<string, unknown
>): Promise
<void> {
20 let messageResponse
: Record
<string, unknown
>;
21 if (this.messageHandlers
.has(command
) && command
!== ProtocolCommand
.UNKNOWN
) {
23 // Call the method to build the response
24 messageResponse
= await this.messageHandlers
.get(command
)(payload
);
27 logger
.error(this.webSocketServer
.logPrefix() + ' Handle message error: %j', error
);
32 throw new BaseError(`${command} is not implemented to handle message payload ${JSON.stringify(payload, null, 2)}`);
34 // Send the built response
35 this.webSocketServer
.broadcastToClients(messageResponse
);
38 private handleStartTransaction(payload
: Record
<string, unknown
>) { }
39 private handleStopTransaction(payload
: Record
<string, unknown
>) { }