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