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