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