X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FWorkerBroadcastChannel.ts;h=b19bf946dc633db77e5c690e75dd4b921de6868a;hb=18057587414006953ed112f315807d64ddb11bfd;hp=d1d430c3a0c39230aef0c00dd5de5660b25e42a0;hpb=4e3ff94d15f16cbeb7f65d14525bca7af3c551fd;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/WorkerBroadcastChannel.ts b/src/charging-station/WorkerBroadcastChannel.ts index d1d430c3..b19bf946 100644 --- a/src/charging-station/WorkerBroadcastChannel.ts +++ b/src/charging-station/WorkerBroadcastChannel.ts @@ -1,13 +1,37 @@ import { BroadcastChannel } from 'worker_threads'; -import { BroadcastChannelRequest } from '../types/WorkerBroadcastChannel'; +import BaseError from '../exception/BaseError'; +import type { JsonType } from '../types/JsonType'; +import type { + BroadcastChannelRequest, + BroadcastChannelResponse, + MessageEvent, +} from '../types/WorkerBroadcastChannel'; -export default class WorkerBroadcastChannel extends BroadcastChannel { - constructor() { +export default abstract class WorkerBroadcastChannel extends BroadcastChannel { + protected constructor() { super('worker'); } public sendRequest(request: BroadcastChannelRequest): void { this.postMessage(request); } + + protected sendResponse(response: BroadcastChannelResponse): void { + this.postMessage(response); + } + + protected isRequest(message: JsonType[]): boolean { + return Array.isArray(message) && message.length === 3; + } + + protected isResponse(message: JsonType[]): boolean { + return Array.isArray(message) && message.length === 2; + } + + protected validateMessageEvent(messageEvent: MessageEvent): void { + if (Array.isArray(messageEvent.data) === false) { + throw new BaseError('Worker broadcast channel protocol message event data is not an array'); + } + } }