README.md: update to reflect response payload format change on
[e-mobility-charging-stations-simulator.git] / src / charging-station / WorkerBroadcastChannel.ts
1 import { BroadcastChannel } from 'worker_threads';
2
3 import BaseError from '../exception/BaseError';
4 import type { JsonType } from '../types/JsonType';
5 import type {
6 BroadcastChannelRequest,
7 BroadcastChannelResponse,
8 MessageEvent,
9 } from '../types/WorkerBroadcastChannel';
10
11 export default abstract class WorkerBroadcastChannel extends BroadcastChannel {
12 protected constructor() {
13 super('worker');
14 }
15
16 public sendRequest(request: BroadcastChannelRequest): void {
17 this.postMessage(request);
18 }
19
20 protected sendResponse(response: BroadcastChannelResponse): void {
21 this.postMessage(response);
22 }
23
24 protected isRequest(message: JsonType[]): boolean {
25 return Array.isArray(message) && message.length === 3;
26 }
27
28 protected isResponse(message: JsonType[]): boolean {
29 return Array.isArray(message) && message.length === 2;
30 }
31
32 protected validateMessageEvent(messageEvent: MessageEvent): MessageEvent {
33 if (Array.isArray(messageEvent.data) === false) {
34 throw new BaseError('Worker broadcast channel protocol message event data is not an array');
35 }
36 return messageEvent;
37 }
38 }