refactor(simulator): switch to named exports
[e-mobility-charging-stations-simulator.git] / src / charging-station / WorkerBroadcastChannel.ts
CommitLineData
32de5a57
LM
1import { BroadcastChannel } from 'worker_threads';
2
6c1761d4 3import type {
852a4c5f
JB
4 BroadcastChannelRequest,
5 BroadcastChannelResponse,
268a74bb 6 JsonType,
852a4c5f 7 MessageEvent,
268a74bb
JB
8} from '../types';
9import { logger } from '../utils/Logger';
10import { Utils } from '../utils/Utils';
5dea4c94
JB
11
12const moduleName = 'WorkerBroadcastChannel';
4e3ff94d 13
268a74bb 14export abstract class WorkerBroadcastChannel extends BroadcastChannel {
6c8f5d90 15 protected constructor() {
32de5a57
LM
16 super('worker');
17 }
4e3ff94d
JB
18
19 public sendRequest(request: BroadcastChannelRequest): void {
20 this.postMessage(request);
21 }
02a6943a 22
6c8f5d90 23 protected sendResponse(response: BroadcastChannelResponse): void {
02a6943a
JB
24 this.postMessage(response);
25 }
6c8f5d90 26
18057587 27 protected isRequest(message: JsonType[]): boolean {
5f7e72c1 28 return Array.isArray(message) === true && message.length === 3;
6c8f5d90
JB
29 }
30
18057587 31 protected isResponse(message: JsonType[]): boolean {
5f7e72c1 32 return Array.isArray(message) === true && message.length === 2;
6c8f5d90 33 }
852a4c5f 34
5dea4c94 35 protected validateMessageEvent(messageEvent: MessageEvent): MessageEvent | false {
852a4c5f 36 if (Array.isArray(messageEvent.data) === false) {
5dea4c94 37 logger.error(
44eb6026
JB
38 `${this.logPrefix(
39 moduleName,
40 'validateMessageEvent'
41 )} Worker broadcast channel protocol message event data is not an array`
5dea4c94
JB
42 );
43 return false;
44 }
03eacbe5 45 if (Utils.validateUUID(messageEvent.data[0]) === false) {
5dea4c94 46 logger.error(
44eb6026
JB
47 `${this.logPrefix(
48 moduleName,
49 'validateMessageEvent'
50 )} Worker broadcast channel protocol message event data UUID field is invalid`
5dea4c94
JB
51 );
52 return false;
852a4c5f 53 }
5e3cb728 54 return messageEvent;
852a4c5f 55 }
5dea4c94 56
8b7072dc 57 private logPrefix = (modName: string, methodName: string): string => {
5dea4c94 58 return Utils.logPrefix(` Worker Broadcast Channel | ${modName}.${methodName}:`);
8b7072dc 59 };
32de5a57 60}