aboutsummaryrefslogtreecommitdiff
path: root/assets/src/network/channel
diff options
context:
space:
mode:
Diffstat (limited to 'assets/src/network/channel')
-rw-r--r--assets/src/network/channel/messages/event_handler.ts21
1 files changed, 15 insertions, 6 deletions
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<M extends TokenizedMessage>(
token: string,
handler: Handler<M>
): 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<M extends TokenizedMessage>(
};
// @ts-ignore
registerNewEvent<M>(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<M>(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<M extends AnyMessage>(
event: M["event_name"]
): Unregister {
const callback = (data: M) => {
- onEvent<M>(messageHandler, data);
+ // Add event_name to message, so the type definitions match
+ const message = { event_name: event, ...data };
+ onEvent<M>(messageHandler, message);
};
const ref = channel.on(event, callback);