Create wt-odlux directory
[ccsdk/features.git] / sdnr / wt-odlux / odlux / lib / broadcast / mapChannel.ts
1
2 const channel: BroadcastChannel = new BroadcastChannel("odlux_map");
3 const listeners: { [key: string]: ((data: any) => void)[] } = {};
4
5 channel.onmessage = (eventMessage: MessageEvent<any>) => {
6   const { key, data } = eventMessage.data;
7   if (listeners[key]) {
8     listeners[key].forEach(listener => listener(data));
9   }
10 };
11
12 export const sendMapMessage = (data: any, key: string) => {
13   channel.postMessage({ key, data });
14 };
15
16 export const addMapMessageListener = (key: string, listener: (data: any) => void) => {
17   if (!listeners[key]) {
18     listeners[key] = [];
19   }
20   
21   if (!listeners[key].find(l => l === listener)) {
22     listeners[key].push(listener);
23   }
24
25   return () => {
26     listeners[key] = listeners[key].filter(l => l !== listener);
27   }
28 };
29