diff options
Diffstat (limited to 'assets/src/network/channel/messages/message_handler.ts')
| -rw-r--r-- | assets/src/network/channel/messages/message_handler.ts | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/assets/src/network/channel/messages/message_handler.ts b/assets/src/network/channel/messages/message_handler.ts new file mode 100644 index 0000000..2aefa1d --- /dev/null +++ b/assets/src/network/channel/messages/message_handler.ts @@ -0,0 +1,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); +} |
