aboutsummaryrefslogtreecommitdiff
path: root/src/server/DashSession/Session/agents/process_message_router.ts
blob: 3e2b7d8d072f1d3dbc28496e98bdd95b020210de (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
import { MessageHandler, PromisifiedIPCManager, HandlerMap } from './promisified_ipc_manager';

export default abstract class IPCMessageReceiver {
    protected static IPCManager: PromisifiedIPCManager;
    protected handlers: HandlerMap = {};

    protected abstract configureInternalHandlers: () => void;

    /**
     * Add a listener at this message. When the monitor process
     * receives a message, it will invoke all registered functions.
     */
    public on = (name: string, handler: MessageHandler) => {
        const handlers = this.handlers[name];
        if (!handlers) {
            this.handlers[name] = [handler];
        } else {
            handlers.push(handler);
        }
    };

    /**
     * Unregister a given listener at this message.
     */
    public off = (name: string, handler: MessageHandler) => {
        const handlers = this.handlers[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 => delete this.handlers[name]);
}