blob: 5848e27ab667aa6d9cdc0cc3d54690eb1b9b5872 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import { MessageHandler, Message } from "../utilities/ipc";
export default abstract class MessageRouter {
private onMessage: { [name: string]: MessageHandler[] | undefined } = {};
/**
* Add a listener at this message. When the monitor process
* receives a message, it will invoke all registered functions.
*/
public addMessageListener = (name: string, handler: MessageHandler, exclusive = false) => {
const handlers = this.onMessage[name];
if (exclusive || !handlers) {
this.onMessage[name] = [handler];
} else {
handlers.push(handler);
}
}
/**
* Unregister a given listener at this message.
*/
public removeMessageListener = (name: string, handler: MessageHandler) => {
const handlers = this.onMessage[name];
if (handlers) {
const index = handlers.indexOf(handler);
if (index > -1) {
handlers.splice(index, 1);
}
}
}
/**
* Unregister all listeners at this message.
*/
public clearMessageListeners = (...names: string[]) => names.map(name => this.onMessage[name] = undefined);
protected route: MessageHandler = async ({ name, args }) => {
const handlers = this.onMessage[name];
if (handlers) {
await Promise.all(handlers.map(handler => handler({ name, args })));
}
}
}
|