From 251cba56d9103c9ac38f9b98b69ee953ce23111e Mon Sep 17 00:00:00 2001 From: Melonai Date: Wed, 14 Jul 2021 19:36:29 +0200 Subject: Started better typing for message handler --- assets/src/network/channel/messages/handler.ts | 112 ------------------------- 1 file changed, 112 deletions(-) delete mode 100644 assets/src/network/channel/messages/handler.ts (limited to 'assets/src/network/channel/messages/handler.ts') 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; -}; - -type EventHandler = { - tokenHandler: TokenHandler; - directHandlers: Handler[]; -}; - -export type TokenHandler = { - [token: string]: Handler; -}; - -export type Handler = ( - message?: Message, - unregister?: UnregisterHandler -) => void; - -export type UnregisterHandler = () => void; - -export function registerTokenHandler( - handlers: Handlers, - channel: Channel, - event: string, - token: string | null, - handler: Handler -): 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(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( - channel: Channel, - eventHandler: EventHandler, - event: string -) { - const callback = (data: Message) => { - handleEvent(eventHandler, data); - }; - - channel.on(event, callback); -} - -function handleEvent( - eventHandler: EventHandler, - message: Message -) { - if (message["token"] !== undefined) { - const token = message["token"]; - - const tokenHandler = eventHandler.tokenHandler; - const handler: Handler = 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( - directHandlers: Handler[], - handler: Handler -): UnregisterHandler { - return () => { - const index = directHandlers.findIndex(h => h === handler); - directHandlers.splice(index, 1); - }; -} - -function makeTokenUnregister( - tokenHandler: TokenHandler, - token: string -): UnregisterHandler { - return () => { - delete tokenHandler[token]; - }; -} -- cgit 1.4.1