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