Skip to content

Commit 10513e1

Browse files
committed
Change the way echo events are handled internally
1 parent 7721a19 commit 10513e1

File tree

2 files changed

+18
-24
lines changed

2 files changed

+18
-24
lines changed

js-src/Channel.ts

+2-10
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,7 @@ export class Channel extends BaseChannel implements PresenceChannel {
7070
* Stop listening for an event on the channel instance.
7171
*/
7272
stopListening(event: string, callback?: Function): Channel {
73-
if (this.listeners[event] && (!callback || this.listeners[event] === callback)) {
74-
delete this.listeners[event]
75-
}
73+
this.socket.unbindEvent(this, event, callback)
7674

7775
return this;
7876
}
@@ -103,17 +101,11 @@ export class Channel extends BaseChannel implements PresenceChannel {
103101
* Bind a channel to an event.
104102
*/
105103
on(event: string, callback: Function): Channel {
106-
this.listeners[event] = callback
104+
this.socket.bind(this, event, callback)
107105

108106
return this;
109107
}
110108

111-
handleEvent(event: string, data: object): void {
112-
if (this.listeners[event]) {
113-
this.listeners[event](event, data)
114-
}
115-
}
116-
117109
whisper(event: string, data: object): Channel {
118110
this.socket.send({
119111
event,

js-src/Websocket.ts

+16-14
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ export class Websocket {
1111

1212
websocket: WebSocket;
1313

14-
private internalListeners: { [index: string]: Function } = {};
14+
private listeners: { [channelName: string]: { [eventName: string]: Function } }
1515

16-
private channelBacklog = [];
16+
private internalListeners: { [eventName: string]: Function } = {};
1717

18-
private channels: { [index: string]: Channel } = {};
18+
private channelBacklog = [];
1919

2020
private socketId: string;
2121

@@ -46,8 +46,8 @@ export class Websocket {
4646
if (message.channel) {
4747
console.log(`Received event ${message.event} on channel ${message.channel}`)
4848

49-
if (this.channels[message.channel]) {
50-
this.channels[message.channel].handleEvent(message.event, message.data)
49+
if (this.listeners[message.channel] && this.listeners[message.channel][message.event]) {
50+
this.listeners[message.channel][message.event](message.data)
5151
}
5252

5353
return
@@ -76,14 +76,14 @@ export class Websocket {
7676
event: 'whoami',
7777
})
7878

79-
// send ping every 10 seconds to keep connection alive
79+
// send ping every 60 seconds to keep connection alive
8080
this.pingInterval = setInterval(() => {
8181
console.log('Sending ping')
8282

8383
this.send({
8484
event: 'ping',
8585
})
86-
}, 10 * 1000)
86+
}, 60 * 1000)
8787

8888
return this
8989
}
@@ -149,8 +149,6 @@ export class Websocket {
149149
auth: response.data.auth,
150150
},
151151
})
152-
153-
this.channels[channel.name] = channel
154152
}).catch((error) => {
155153
console.log(`Auth request for channel ${channel.name} failed`)
156154
console.error(error)
@@ -164,8 +162,6 @@ export class Websocket {
164162
channel: channel.name,
165163
},
166164
})
167-
168-
this.channels[channel.name] = channel
169165
}
170166
}
171167

@@ -176,15 +172,21 @@ export class Websocket {
176172
channel: channel.name,
177173
},
178174
})
179-
180-
delete this.channels[channel.name]
181175
}
182176

183177
on(event: string, callback: Function = null): void {
184178
this.internalListeners[event] = callback
185179
}
186180

187-
unbindEvent(event: string, callback: Function = null): void {
181+
bind(channel: Channel, event: string, callback: Function): void {
182+
if (!this.listeners[channel.name]) {
183+
this.listeners[channel.name] = {}
184+
}
185+
186+
this.listeners[channel.name][event] = callback
187+
}
188+
189+
unbindEvent(channel: Channel, event: string, callback: Function = null): void {
188190
if (this.internalListeners[event] && (callback === null || this.internalListeners[event] === callback)) {
189191
delete this.internalListeners[event]
190192
}

0 commit comments

Comments
 (0)