echogarden
Version:
An easy-to-use speech toolset. Includes tools for synthesis, recognition, alignment, speech translation, language detection, source separation and more.
30 lines (22 loc) • 670 B
text/typescript
export class SignalChannel {
channel: MessageChannel
handlers = new Map<string, SignalChannelHandler>()
constructor() {
this.channel = new MessageChannel()
this.channel.port2.onmessage = (event: MessageEvent) => {
const signalName = event.data.signalName
const signalData = event.data.data
const handler = this.handlers.get(signalName)
if (handler) {
handler(signalData)
}
}
}
on(signalName: string, handler: SignalChannelHandler) {
this.handlers.set(signalName, handler)
}
send(signalName: string, data?: any) {
this.channel.port1.postMessage({ signalName, data })
}
}
export type SignalChannelHandler = (data?: any) => void