diff options
| author | Mel <einebeere@gmail.com> | 2022-02-19 19:47:44 +0100 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-02-19 19:58:33 +0100 |
| commit | 5384c34952b031995ecb8aa58d72954b0c685e18 (patch) | |
| tree | ba7c9dfe77d77e5c4bce03c60d08f056f40235c0 /assets/src/network/channel/messages/message_handler.ts | |
| parent | d5f7201eb7b10826e77eccb33f9cca784261091f (diff) | |
| download | rook-5384c34952b031995ecb8aa58d72954b0c685e18.tar.zst rook-5384c34952b031995ecb8aa58d72954b0c685e18.zip | |
Re-architect event handler for simplicity
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); +} |
