From 9408f96de539b603124d4df37f1b69c2dbe185c6 Mon Sep 17 00:00:00 2001 From: Melonai Date: Sat, 31 Jul 2021 14:42:22 +0200 Subject: Reregister unregistered token handlers on re-use --- .../src/network/channel/messages/event_handler.ts | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'assets/src/network/channel/messages/event_handler.ts') diff --git a/assets/src/network/channel/messages/event_handler.ts b/assets/src/network/channel/messages/event_handler.ts index 749f289..fe950ea 100644 --- a/assets/src/network/channel/messages/event_handler.ts +++ b/assets/src/network/channel/messages/event_handler.ts @@ -87,7 +87,9 @@ export function registerHandlerForSpecificToken( token: string, handler: Handler ): Unregister { - if (typeof eventHandler[event] === "undefined") { + const messageHandler = eventHandler[event]; + + if (typeof messageHandler === "undefined") { // TODO: Same as above, this should probably be valid. // @ts-ignore eventHandler[event] = { @@ -96,10 +98,15 @@ export function registerHandlerForSpecificToken( }; // @ts-ignore registerNewEvent(channel, eventHandler[event], event); - } else { - if (eventHandler[event].type === "single") { - throw new Error("Event already has a handler attached to it."); - } + } else if ( + messageHandler.type === "token" && + messageHandler.handler.size === 0 + ) { + // If there is already a token handler with no token, we need to register the event again + // @ts-ignore + registerNewEvent(channel, messageHandler, event); + } else if (messageHandler.type === "single") { + throw new Error("Event already has a handler attached to it."); } // @ts-ignore This shoudl be valid, as we derive the event name from the message type. @@ -125,7 +132,9 @@ function registerNewEvent( event: M["event_name"] ): Unregister { const callback = (data: M) => { - onEvent(messageHandler, data); + // Add event_name to message, so the type definitions match + const message = { event_name: event, ...data }; + onEvent(messageHandler, message); }; const ref = channel.on(event, callback); -- cgit 1.4.1