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