Comparing version 0.4.2 to 0.4.3
@@ -0,1 +1,6 @@ | ||
v0.4.3 - Feb 4th 2012 | ||
===================== | ||
* Prioritized update: Corrected issue which would cause sockets to stay open longer than necessary, and resource leakage because of this. [einaros] | ||
v0.4.2 - Feb 4th 2012 | ||
@@ -2,0 +7,0 @@ ===================== |
@@ -40,2 +40,3 @@ /*! | ||
} | ||
Object.defineProperty(this, '_socket', { writable: true, value: null }); | ||
@@ -55,16 +56,4 @@ Object.defineProperty(this, 'readyState', { | ||
if (Object.prototype.toString.call(address) == '[object Array]') { | ||
/** | ||
* Act as server client | ||
*/ | ||
initAsServerClient.apply(this, address.concat(options)); | ||
} | ||
else { | ||
/** | ||
* Act as regular client | ||
*/ | ||
initAsClient.apply(this, arguments); | ||
} | ||
if (Object.prototype.toString.call(address) == '[object Array]') initAsServerClient.apply(this, address.concat(options)); | ||
else initAsClient.apply(this, arguments); | ||
} | ||
@@ -336,4 +325,4 @@ | ||
// establish connection | ||
if (options.value.protocolVersion == 'hixie-76') establishHixieConnection.call(this, socket, upgradeHead); | ||
else establishHybiConnection.call(this, socket, upgradeHead); | ||
if (options.value.protocolVersion == 'hixie-76') establishConnection.call(this, ReceiverHixie, SenderHixie, socket, upgradeHead); | ||
else establishConnection.call(this, Receiver, Sender, socket, upgradeHead); | ||
} | ||
@@ -429,3 +418,3 @@ | ||
establishHybiConnection.call(self, socket, upgradeHead); | ||
establishConnection.call(self, Receiver, Sender, socket, upgradeHead); | ||
}); | ||
@@ -437,3 +426,3 @@ | ||
function establishHybiConnection(socket, upgradeHead) { | ||
function establishConnection(ReceiverClass, SenderClass, socket, upgradeHead) { | ||
this._socket = socket; | ||
@@ -446,2 +435,11 @@ socket.setTimeout(0); | ||
self._readyState = WebSocket.CLOSED; | ||
if (self._socket) { | ||
self._socket.removeAllListeners(); | ||
self._socket.end(); | ||
self._socket = null; | ||
} | ||
if (self._sender) { | ||
self._sender.removeAllListeners(); | ||
self._sender = null; | ||
} | ||
self.emit('close', self._closeCode || 1000, self._closeMessage || ''); | ||
@@ -452,69 +450,15 @@ }); | ||
self._readyState = WebSocket.CLOSED; | ||
self.emit('close', self._closeCode || 1000, self._closeMessage || ''); | ||
}); | ||
var receiver = new Receiver(); | ||
socket.on('data', function (data) { | ||
receiver.add(data); | ||
}); | ||
receiver.on('text', function (data, flags) { | ||
flags = flags || {}; | ||
self.emit('message', data, flags); | ||
}); | ||
receiver.on('binary', function (data, flags) { | ||
flags = flags || {}; | ||
flags.binary = true; | ||
self.emit('message', data, flags); | ||
}); | ||
receiver.on('ping', function(data, flags) { | ||
flags = flags || {}; | ||
self.pong(data, {mask: !self._isServer, binary: flags.binary === true}); | ||
self.emit('ping', data, flags); | ||
}); | ||
receiver.on('pong', function(data, flags) { | ||
self.emit('pong', data, flags); | ||
}); | ||
receiver.on('close', function(code, data, flags) { | ||
flags = flags || {}; | ||
self.close(code, data, {mask: !self._isServer}); | ||
}); | ||
receiver.on('error', function(reason, errorCode) { | ||
// close the connection when the receiver reports a HyBi error code | ||
if (typeof errorCode !== 'undefined') { | ||
self.close(errorCode, '', {mask: !self._isServer}); | ||
if (self._socket) { | ||
self._socket.removeAllListeners(); | ||
self._socket.end(); | ||
self._socket = null; | ||
} | ||
self.emit('error', reason, errorCode); | ||
}); | ||
Object.defineProperty(this, '_sender', { value: new Sender(socket) }); | ||
this._sender.on('error', function(error) { | ||
self.emit('error', error); | ||
}); | ||
this._readyState = WebSocket.OPEN; | ||
this.emit('open'); | ||
if (upgradeHead && upgradeHead.length > 0) { | ||
process.nextTick(function() { | ||
receiver.add(upgradeHead); | ||
}); | ||
} | ||
} | ||
function establishHixieConnection(socket, upgradeHead) { | ||
this._socket = socket; | ||
socket.setTimeout(0); | ||
socket.setNoDelay(true); | ||
var self = this; | ||
socket.on('end', function() { | ||
if (self.readyState == WebSocket.CLOSED) return; | ||
self._readyState = WebSocket.CLOSED; | ||
if (self._sender) { | ||
self._sender.removeAllListeners(); | ||
self._sender = null; | ||
} | ||
self.emit('close', self._closeCode || 1000, self._closeMessage || ''); | ||
}); | ||
socket.on('close', function() { | ||
if (self.readyState == WebSocket.CLOSED) return; | ||
self._readyState = WebSocket.CLOSED; | ||
self.emit('close', self._closeCode || 1000, self._closeMessage || ''); | ||
}); | ||
var receiver = new ReceiverHixie(); | ||
var receiver = new ReceiverClass(); | ||
socket.on('data', function (data) { | ||
@@ -552,3 +496,3 @@ receiver.add(data); | ||
Object.defineProperty(this, '_sender', { value: new SenderHixie(socket) }); | ||
Object.defineProperty(this, '_sender', { value: new SenderClass(socket) }); | ||
this._sender.on('error', function(error) { | ||
@@ -555,0 +499,0 @@ self.emit('error', error); |
@@ -42,3 +42,3 @@ /*! | ||
res.writeHead(200, {'Content-Type': 'text/plain'}); | ||
res.end(); | ||
res.end('Not implemented'); | ||
}) | ||
@@ -45,0 +45,0 @@ }); |
@@ -5,3 +5,3 @@ { | ||
"description": "simple to use, blazing fast and thoroughly tested websocket client, server and console for node.js, up-to-date against RFC-6455", | ||
"version": "0.4.2", | ||
"version": "0.4.3", | ||
"repository": { | ||
@@ -8,0 +8,0 @@ "type": "git", |
Sorry, the diff of this file is not supported yet
185585
4875