import { TypedRequest } from '@apiglobal/typedrequest'; import * as plugins from './dees-comms.plugins'; /** * a comm class for client side communication between workers and tabs. */ export class DeesComms { // sending messages private postChannel = new BroadcastChannel('dees-comms'); private typedrouter = new plugins.typedrequest.TypedRouter(); private subscriptionChannel = new BroadcastChannel('dees-comms'); constructor() { this.subscriptionChannel.onmessage = (eventArg) => { const message = eventArg.data; this.typedrouter.routeAndAddResponse(message); }; } /** * creates a typedrequest with this classes postMessage as postMethod */ public createTypedRequest( methodName: T['method'] ): TypedRequest { const typedrequest = new plugins.typedrequest.TypedRequest(this.postMessage, methodName, this.typedrouter); return typedrequest; } /** * posts a typedrequestmessage */ public async postMessage( messageArg: T ): Promise { this.postChannel.postMessage(messageArg); } /** * subscribe to messages */ public async subscribe() {} }