about summary refs log tree commit diff
path: root/assets/src/network/channel/messages/message_handler.ts
blob: 2aefa1d9c73380f57c754c1af8dfc22e21cb2b79 (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
import type { AnyMessage, RequestMessage, ShareMessage } from "./messages";

export type HandlerFn<Message> = (message: Message) => void;

export type MessageHandler<Messages extends AnyMessage> = {
    [M in Messages as M["event_name"]]?: HandlerFn<M>;
};

export type RequestMessageHandler = MessageHandler<RequestMessage>;
export type ShareMessageHandler = MessageHandler<ShareMessage>;

const defaultHandlerFn: HandlerFn<AnyMessage> = m => {
    console.error(
        `Received unknown event "${m.event_name}": ${JSON.stringify(m)}`
    );
};

export function routeEventToHandler(
    event: string,
    message: any,
    handlers: MessageHandler<AnyMessage>
): void {
    const handler = handlers[event] || defaultHandlerFn;
    handler(message);
}