1 import { BroadcastChannel
} from
'worker_threads';
3 import * as uuid from
'uuid';
5 import type { JsonType
} from
'../types/JsonType';
7 BroadcastChannelRequest
,
8 BroadcastChannelResponse
,
10 } from
'../types/WorkerBroadcastChannel';
11 import logger from
'../utils/Logger';
12 import Utils from
'../utils/Utils';
14 const moduleName
= 'WorkerBroadcastChannel';
16 export default abstract class WorkerBroadcastChannel
extends BroadcastChannel
{
17 protected constructor() {
21 public sendRequest(request
: BroadcastChannelRequest
): void {
22 this.postMessage(request
);
25 protected sendResponse(response
: BroadcastChannelResponse
): void {
26 this.postMessage(response
);
29 protected isRequest(message
: JsonType
[]): boolean {
30 return Array.isArray(message
) && message
.length
=== 3;
33 protected isResponse(message
: JsonType
[]): boolean {
34 return Array.isArray(message
) && message
.length
=== 2;
37 protected validateMessageEvent(messageEvent
: MessageEvent
): MessageEvent
| false {
38 if (Array.isArray(messageEvent
.data
) === false) {
40 this.logPrefix(moduleName
, 'validateMessageEvent') +
41 ' Worker broadcast channel protocol message event data is not an array'
45 if (uuid
.validate(messageEvent
.data
[0]) === false) {
47 this.logPrefix(moduleName
, 'validateMessageEvent') +
48 ' Worker broadcast channel protocol message event data UUID field is invalid'
55 private logPrefix(modName
: string, methodName
: string): string {
56 return Utils
.logPrefix(` Worker Broadcast Channel | ${modName}.${methodName}:`);