about summary refs log tree commit diff
path: root/assets/src/network/channel/messages/message_handler.ts
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-02-19 19:47:44 +0100
committerMel <einebeere@gmail.com>2022-02-19 19:58:33 +0100
commit5384c34952b031995ecb8aa58d72954b0c685e18 (patch)
treeba7c9dfe77d77e5c4bce03c60d08f056f40235c0 /assets/src/network/channel/messages/message_handler.ts
parentd5f7201eb7b10826e77eccb33f9cca784261091f (diff)
downloadrook-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.ts25
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);
+}