about summary refs log tree commit diff
path: root/assets/src/network/channel/messages/handler.ts
diff options
context:
space:
mode:
authorMelonai <einebeere@gmail.com>2021-07-14 19:36:29 +0200
committerMelonai <einebeere@gmail.com>2021-07-14 19:36:29 +0200
commit251cba56d9103c9ac38f9b98b69ee953ce23111e (patch)
treeebe7f48b99fd4d754084ebe416e6bbbc9f71092d /assets/src/network/channel/messages/handler.ts
parentc3b05a72b7185112ece6e42c99e9a828c8298f04 (diff)
downloadrook-251cba56d9103c9ac38f9b98b69ee953ce23111e.tar.zst
rook-251cba56d9103c9ac38f9b98b69ee953ce23111e.zip
Started better typing for message handler
Diffstat (limited to 'assets/src/network/channel/messages/handler.ts')
-rw-r--r--assets/src/network/channel/messages/handler.ts112
1 files changed, 0 insertions, 112 deletions
diff --git a/assets/src/network/channel/messages/handler.ts b/assets/src/network/channel/messages/handler.ts
deleted file mode 100644
index cc8f005..0000000
--- a/assets/src/network/channel/messages/handler.ts
+++ /dev/null
@@ -1,112 +0,0 @@
-import type { Channel } from "phoenix";
-import type { AnyMessage } from "./messages";
-
-export type Handlers = {
-    [event: string]: EventHandler<unknown>;
-};
-
-type EventHandler<Message extends AnyMessage> = {
-    tokenHandler: TokenHandler<Message>;
-    directHandlers: Handler<Message>[];
-};
-
-export type TokenHandler<Message extends AnyMessage> = {
-    [token: string]: Handler<Message>;
-};
-
-export type Handler<Message extends AnyMessage> = (
-    message?: Message,
-    unregister?: UnregisterHandler
-) => void;
-
-export type UnregisterHandler = () => void;
-
-export function registerTokenHandler<Message extends AnyMessage>(
-    handlers: Handlers,
-    channel: Channel,
-    event: string,
-    token: string | null,
-    handler: Handler<Message>
-): UnregisterHandler {
-    let eventHandler = handlers[event];
-
-    // If this event did not yet have any handlers registered we have to register it
-    if (eventHandler === undefined) {
-        eventHandler = {
-            tokenHandler: {},
-            directHandlers: [],
-        };
-
-        handlers[event] = eventHandler;
-
-        registerNewEvent<Message>(channel, eventHandler, event);
-    }
-
-    let unregister: UnregisterHandler;
-
-    if (token === null) {
-        const directHandlers = eventHandler.directHandlers;
-        directHandlers.push(handler);
-
-        unregister = makeDirectUnregister(directHandlers, handler);
-    } else {
-        const tokenHandler = eventHandler.tokenHandler;
-        tokenHandler[token] = handler;
-
-        unregister = makeTokenUnregister(tokenHandler, token);
-    }
-
-    return unregister;
-}
-
-function registerNewEvent<Message extends AnyMessage>(
-    channel: Channel,
-    eventHandler: EventHandler<Message>,
-    event: string
-) {
-    const callback = (data: Message) => {
-        handleEvent<Message>(eventHandler, data);
-    };
-
-    channel.on(event, callback);
-}
-
-function handleEvent<Message extends AnyMessage>(
-    eventHandler: EventHandler<Message>,
-    message: Message
-) {
-    if (message["token"] !== undefined) {
-        const token = message["token"];
-
-        const tokenHandler = eventHandler.tokenHandler;
-        const handler: Handler<Message> = tokenHandler[token];
-
-        if (handler !== undefined) {
-            handler(message, makeTokenUnregister(tokenHandler, token));
-        }
-    }
-
-    const directHandlers = eventHandler.directHandlers;
-    for (const handler of directHandlers) {
-        handler(message, makeDirectUnregister(directHandlers, handler));
-    }
-}
-
-function makeDirectUnregister<Message extends AnyMessage>(
-    directHandlers: Handler<Message>[],
-    handler: Handler<Message>
-): UnregisterHandler {
-    return () => {
-        const index = directHandlers.findIndex(h => h === handler);
-        directHandlers.splice(index, 1);
-    };
-}
-
-function makeTokenUnregister<Message extends AnyMessage>(
-    tokenHandler: TokenHandler<Message>,
-    token: string
-): UnregisterHandler {
-    return () => {
-        delete tokenHandler[token];
-    };
-}