From b30522188e6dbb80c88b30a310237211e793586f Mon Sep 17 00:00:00 2001 From: Romain Beaumont Date: Fri, 11 Dec 2015 14:55:52 +0100 Subject: [PATCH] don't write after end and unpipe everything when ending. fix #110 --- src/client.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/client.js b/src/client.js index 3d3d118..b7bbf73 100644 --- a/src/client.js +++ b/src/client.js @@ -22,6 +22,7 @@ class Client extends EventEmitter isServer; version; protocolState=states.HANDSHAKING; + ended=true; constructor(isServer,version) { super(); @@ -123,12 +124,12 @@ class Client extends EventEmitter } setSocket(socket) { - var ended = false; + this.ended = false; // TODO : A lot of other things needs to be done. var endSocket = () => { - if(ended) return; - ended = true; + if(this.ended) return; + this.ended = true; this.socket.removeListener('close', endSocket); this.socket.removeListener('end', endSocket); this.socket.removeListener('timeout', endSocket); @@ -162,6 +163,8 @@ class Client extends EventEmitter end(reason) { this._endReason = reason; + if(this.cipher) this.cipher.unpipe(); + if(this.framer) this.framer.unpipe(); if(this.socket) this.socket.end(); } @@ -195,12 +198,16 @@ class Client extends EventEmitter } write(name, params) { + if(this.ended) + return; debug("writing packet " + this.state + "." + name); debug(params); this.serializer.write({ name, params }); } writeRaw(buffer) { + if(this.ended) + return; if (this.compressor === null) this.framer.write(buffer); else