From 5384c34952b031995ecb8aa58d72954b0c685e18 Mon Sep 17 00:00:00 2001 From: Mel Date: Sat, 19 Feb 2022 19:47:44 +0100 Subject: Re-architect event handler for simplicity --- .../network/channel/messages/message_handler.ts | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 assets/src/network/channel/messages/message_handler.ts (limited to 'assets/src/network/channel/messages/message_handler.ts') 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) => void; + +export type MessageHandler = { + [M in Messages as M["event_name"]]?: HandlerFn; +}; + +export type RequestMessageHandler = MessageHandler; +export type ShareMessageHandler = MessageHandler; + +const defaultHandlerFn: HandlerFn = m => { + console.error( + `Received unknown event "${m.event_name}": ${JSON.stringify(m)}` + ); +}; + +export function routeEventToHandler( + event: string, + message: any, + handlers: MessageHandler +): void { + const handler = handlers[event] || defaultHandlerFn; + handler(message); +} -- cgit 1.4.1