Skip to content

Commit 3f1c702

Browse files
authored
Merge pull request #247 from kiwiirc/extra-event
Fix duplicate connections/events
2 parents dd9aa2e + afe5027 commit 3f1c702

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

src/connection.js

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ module.exports = class Connection extends EventEmitter {
4040

4141
connect(options) {
4242
var that = this;
43-
var transport;
4443

4544
if (options) {
4645
this.options = options;
@@ -52,44 +51,40 @@ module.exports = class Connection extends EventEmitter {
5251
this.auto_reconnect_max_retries = options.auto_reconnect_max_retries || 3;
5352

5453
if (this.transport) {
55-
unbindTransportEvents(this.transport);
54+
this.clearTimers();
55+
this.transport.removeAllListeners();
56+
this.transport.disposeSocket();
5657
}
57-
transport = this.transport = new options.transport(options);
58+
this.transport = new options.transport(options);
5859

5960
if (!options.encoding || !this.setEncoding(options.encoding)) {
6061
this.setEncoding('utf8');
6162
}
6263

63-
// Some transports may emit extra events
64-
transport.on('extra', function(/* event_name, argN */) {
65-
that.emit.apply(that, arguments);
66-
});
67-
68-
bindTransportEvents(transport);
64+
bindTransportEvents(this.transport);
6965

7066
this.registered = false;
7167
this.requested_disconnect = false;
7268
this.emit('connecting');
73-
transport.connect();
69+
this.transport.connect();
7470

7571
function bindTransportEvents(transport) {
7672
transport.on('open', socketOpen);
7773
transport.on('line', socketLine);
7874
transport.on('close', socketClose);
7975
transport.on('debug', transportDebug);
80-
}
81-
82-
function unbindTransportEvents(transport) {
83-
transport.removeListener('open', socketOpen);
84-
transport.removeListener('line', socketLine);
85-
transport.removeListener('close', socketClose);
86-
transport.removeListener('debug', transportDebug);
76+
transport.on('extra', transportExtra);
8777
}
8878

8979
function transportDebug(out) {
9080
that.debugOut(out);
9181
}
9282

83+
function transportExtra() {
84+
// Some transports may emit extra events
85+
that.emit.apply(that, arguments);
86+
}
87+
9388
// Called when the socket is connected and ready to start sending/receiving data.
9489
function socketOpen() {
9590
that.debugOut('Socket fully connected');
@@ -143,7 +138,7 @@ module.exports = class Connection extends EventEmitter {
143138
wait: that.auto_reconnect_wait
144139
});
145140
} else {
146-
unbindTransportEvents(that.transport);
141+
that.transport.removeAllListeners();
147142
that.emit('close', !!err);
148143
that.reconnect_attempts = 0;
149144
}

0 commit comments

Comments
 (0)