Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fa7dcf365c | |||
| 018ef183bf | |||
| b545e8b80f | |||
| 07f5ef6f95 | |||
| 052120b3d5 | |||
| f97fd88e02 | |||
| a8481f8cdd | |||
| d0c9689747 | |||
| e668e64271 | |||
| f0b97a8005 | |||
| e3cc891187 |
@@ -6,3 +6,6 @@ node_js:
|
||||
- "0.10"
|
||||
- "0.11"
|
||||
|
||||
before_install:
|
||||
- '[ "${TRAVIS_NODE_VERSION}" = "0.6" ] && npm conf set strict-ssl false || true'
|
||||
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
### 0.7.2 / 2013-12-29
|
||||
|
||||
* Make sure the `close` event is emitted by clients on Node v0.10
|
||||
|
||||
|
||||
### 0.7.1 / 2013-12-03
|
||||
|
||||
* Support the `maxLength` websocket-driver option
|
||||
* Make the client emit `error` events on network errors
|
||||
|
||||
|
||||
### 0.7.0 / 2013-09-09
|
||||
|
||||
* Allow the server to send custom headers with EventSource responses
|
||||
|
||||
@@ -155,6 +155,8 @@ var ws = new WebSocket.Client(url, protocols, options);
|
||||
|
||||
* `headers` - an object containing key-value pairs representing HTTP headers to
|
||||
be sent during the handshake process
|
||||
* `maxLength` - the maximum allowed size of incoming message frames, in bytes.
|
||||
The default value is `2^26 - 1`, or 1 byte short of 64 MiB.
|
||||
* `ping` - an integer that sets how often the WebSocket should send ping
|
||||
frames, measured in seconds
|
||||
|
||||
|
||||
@@ -9,8 +9,10 @@ var util = require('util'),
|
||||
API = require('./websocket/api');
|
||||
|
||||
var WebSocket = function(request, socket, body, protocols, options) {
|
||||
this._stream = socket;
|
||||
this._driver = driver.http(request, {protocols: protocols});
|
||||
options = options || {};
|
||||
|
||||
this._stream = socket;
|
||||
this._driver = driver.http(request, {maxLength: options.maxLength, protocols: protocols});
|
||||
|
||||
var self = this;
|
||||
if (!this._stream || !this._stream.writable) return;
|
||||
@@ -18,16 +20,9 @@ var WebSocket = function(request, socket, body, protocols, options) {
|
||||
var catchup = function() { self._stream.removeListener('data', catchup) };
|
||||
this._stream.on('data', catchup);
|
||||
|
||||
this._stream.setTimeout(0);
|
||||
this._stream.setNoDelay(true);
|
||||
|
||||
this._driver.io.write(body);
|
||||
API.call(this, options);
|
||||
|
||||
['error', 'end'].forEach(function(event) {
|
||||
this._stream.on(event, function() { self._finalize('', 1006) });
|
||||
}, this);
|
||||
|
||||
process.nextTick(function() {
|
||||
self._driver.start();
|
||||
});
|
||||
|
||||
@@ -23,6 +23,20 @@ var API = function(options) {
|
||||
|
||||
var self = this;
|
||||
|
||||
this._stream.setTimeout(0);
|
||||
this._stream.setNoDelay(true);
|
||||
|
||||
['close', 'end'].forEach(function(event) {
|
||||
this._stream.on(event, function() { self._finalize('', 1006) });
|
||||
}, this);
|
||||
|
||||
this._stream.on('error', function(error) {
|
||||
var event = new Event('error', {message: 'Network error: ' + self.url + ': ' + error.message});
|
||||
event.initEvent('error', false, false);
|
||||
self.dispatchEvent(event);
|
||||
self._finalize('', 1006);
|
||||
});
|
||||
|
||||
this._driver.on('open', function(e) { self._open() });
|
||||
this._driver.on('message', function(e) { self._receiveMessage(e.data) });
|
||||
this._driver.on('close', function(e) { self._finalize(e.reason, e.code) });
|
||||
|
||||
@@ -2,12 +2,15 @@ var util = require('util'),
|
||||
net = require('net'),
|
||||
tls = require('tls'),
|
||||
driver = require('websocket-driver'),
|
||||
API = require('./api');
|
||||
API = require('./api'),
|
||||
Event = require('./api/event');
|
||||
|
||||
var Client = function(url, protocols, options) {
|
||||
options = options || {};
|
||||
|
||||
this.url = url;
|
||||
this._uri = require('url').parse(url);
|
||||
this._driver = driver.client(url, {protocols: protocols});
|
||||
this._driver = driver.client(url, {maxLength: options.maxLength, protocols: protocols});
|
||||
|
||||
['open', 'error'].forEach(function(event) {
|
||||
this._driver.on(event, function() {
|
||||
@@ -21,23 +24,16 @@ var Client = function(url, protocols, options) {
|
||||
tlsOptions = {},
|
||||
self = this;
|
||||
|
||||
if (options && options.ca) tlsOptions.ca = options.ca;
|
||||
if (options.ca) tlsOptions.ca = options.ca;
|
||||
|
||||
var connection = secure
|
||||
? tls.connect(this._uri.port || 443, this._uri.hostname, tlsOptions, onConnect)
|
||||
: net.createConnection(this._uri.port || 80, this._uri.hostname);
|
||||
|
||||
this._stream = connection;
|
||||
this._stream.setTimeout(0);
|
||||
this._stream.setNoDelay(true);
|
||||
|
||||
if (!secure) this._stream.on('connect', onConnect);
|
||||
|
||||
API.call(this, options);
|
||||
|
||||
['error', 'end'].forEach(function(event) {
|
||||
this._stream.on(event, function() { self._finalize('', 1006) });
|
||||
}, this);
|
||||
};
|
||||
util.inherits(Client, API);
|
||||
|
||||
|
||||
+2
-2
@@ -5,10 +5,10 @@
|
||||
, "keywords" : ["websocket", "eventsource"]
|
||||
, "license" : "MIT"
|
||||
|
||||
, "version" : "0.7.0"
|
||||
, "version" : "0.7.2"
|
||||
, "engines" : {"node": ">=0.4.0"}
|
||||
, "main" : "./lib/faye/websocket"
|
||||
, "dependencies" : {"websocket-driver": ">=0.3.0"}
|
||||
, "dependencies" : {"websocket-driver": ">=0.3.1"}
|
||||
, "devDependencies" : {"jstest": "", "pace": ""}
|
||||
|
||||
, "scripts" : {"test": "jstest spec/runner.js"}
|
||||
|
||||
@@ -7,12 +7,12 @@ var WebSocketSteps = test.asyncSteps({
|
||||
this._adapter = new EchoServer()
|
||||
this._adapter.listen(port, secure)
|
||||
this._port = port
|
||||
setTimeout(callback, 100)
|
||||
process.nextTick(callback)
|
||||
},
|
||||
|
||||
stop: function(callback) {
|
||||
this._adapter.stop()
|
||||
setTimeout(callback, 100)
|
||||
process.nextTick(callback)
|
||||
},
|
||||
|
||||
open_socket: function(url, protocols, callback) {
|
||||
@@ -59,14 +59,20 @@ var WebSocketSteps = test.asyncSteps({
|
||||
},
|
||||
|
||||
listen_for_message: function(callback) {
|
||||
var self = this
|
||||
var time = new Date().getTime(), self = this
|
||||
this._ws.addEventListener('message', function(message) { self._message = message.data })
|
||||
callback()
|
||||
var timer = setInterval(function() {
|
||||
if (self._message || new Date().getTime() - time > 3000) {
|
||||
clearInterval(timer)
|
||||
callback()
|
||||
}
|
||||
}, 100)
|
||||
},
|
||||
|
||||
send_message: function(message, callback) {
|
||||
this._ws.send(message)
|
||||
setTimeout(callback, 100)
|
||||
var ws = this._ws
|
||||
setTimeout(function() { ws.send(message) }, 500)
|
||||
process.nextTick(callback)
|
||||
},
|
||||
|
||||
check_response: function(message, callback) {
|
||||
@@ -110,26 +116,26 @@ test.describe("Client", function() { with(this) {
|
||||
}})
|
||||
|
||||
it("can send and receive messages", function() { with(this) {
|
||||
listen_for_message()
|
||||
send_message("I expect this to be echoed")
|
||||
listen_for_message()
|
||||
check_response("I expect this to be echoed")
|
||||
}})
|
||||
|
||||
it("sends numbers as strings", function() { with(this) {
|
||||
listen_for_message()
|
||||
send_message(13)
|
||||
listen_for_message()
|
||||
check_response("13")
|
||||
}})
|
||||
|
||||
it("sends booleans as strings", function() { with(this) {
|
||||
listen_for_message()
|
||||
send_message(false)
|
||||
listen_for_message()
|
||||
check_response("false")
|
||||
}})
|
||||
|
||||
it("sends arrays as strings", function() { with(this) {
|
||||
listen_for_message()
|
||||
send_message([13,14,15])
|
||||
listen_for_message()
|
||||
check_response("13,14,15")
|
||||
}})
|
||||
}})
|
||||
@@ -141,8 +147,8 @@ test.describe("Client", function() { with(this) {
|
||||
}})
|
||||
|
||||
it("cannot send and receive messages", function() { with(this) {
|
||||
listen_for_message()
|
||||
send_message("I expect this to be echoed")
|
||||
listen_for_message()
|
||||
check_no_response()
|
||||
}})
|
||||
}})
|
||||
|
||||
Reference in New Issue
Block a user