Add initial code for WebSocket server to pilot remotely the simulator
[e-mobility-charging-stations-simulator.git] / src / charging-station / WebSocketServer.ts
1 import { IncomingMessage } from 'http';
2 import WebSocket from 'ws';
3 import logger from '../utils/Logger';
4
5 enum WebSocketServerCommand {
6 START_TRANSACTION = 'startTransaction',
7 STOP_TRANSACTION = 'stopTransaction',
8 UNKNOWN = 'unknown',
9 }
10
11 type WebSocketServerRequest = [WebSocketServerCommand, Record<string, unknown>];
12
13 export default class WebSocketServer extends WebSocket.Server {
14 public constructor(options?: WebSocket.ServerOptions, callback?: () => void) {
15 // Create the WebSocket Server
16 super(options, callback);
17 }
18
19 public broadcastToClients(message: Record<string, unknown>): void {
20 for (const client of this.clients) {
21 if (client?.readyState === WebSocket.OPEN) {
22 client.send(message);
23 }
24 }
25 }
26
27 public start(): void {
28 // this.on('connection', (socket: WebSocket, request: IncomingMessage): void => {
29 // // Check connection validity
30 // });
31 this.on('message', (messageData) => {
32 let [command, payload]: WebSocketServerRequest = [WebSocketServerCommand.UNKNOWN, {}];
33 // FIXME: check for iterable object
34 [command, payload] = JSON.parse(messageData.toString()) as WebSocketServerRequest;
35 switch (command) {
36 case WebSocketServerCommand.START_TRANSACTION:
37 break;
38 case WebSocketServerCommand.STOP_TRANSACTION:
39 break;
40 default:
41 logger.warn(`Unknown command: ${command}`);
42 }
43 });
44 }
45 }