diff --git a/Makefile b/Makefile index 860a66c9..9065e778 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,2 @@ test: - ./support/expresso/bin/expresso -I lib $(TESTFLAGS) tests/* \ No newline at end of file + ./support/expresso/bin/expresso -I lib $(TESTFLAGS) tests/*.js \ No newline at end of file diff --git a/lib/socket.io/client.js b/lib/socket.io/client.js index 161f0d3c..653d3c61 100644 --- a/lib/socket.io/client.js +++ b/lib/socket.io/client.js @@ -4,15 +4,16 @@ var urlparse = require('url').parse , options = require('./utils').options , encode = require('./utils').encode , decode = require('./utils').decode + , merge = require('./utils').merge; -Client = module.exports = function(listener, req, res, options, head){ +var Client = module.exports = function(listener, req, res, options, head){ process.EventEmitter.call(this); this.listener = listener; - this.options({ + this.options(merge(this.getOptions ? this.getOptions() : {}, { timeout: 8000, heartbeatInterval: 10000, closeTimeout: 0 - }, options); + }), options); this.connections = 0; this._open = false; this._heartbeats = 0; diff --git a/lib/socket.io/listener.js b/lib/socket.io/listener.js index 68cda982..0a4fb73c 100644 --- a/lib/socket.io/listener.js +++ b/lib/socket.io/listener.js @@ -1,19 +1,19 @@ -var url = require('url'), - sys = require('sys'), - fs = require('fs'), - options = require('./utils').options, - Client = require('./client'), - clientVersion = require('./../../support/socket.io-client/lib/io').io.version, - transports = { - 'flashsocket': require('./transports/flashsocket'), - 'htmlfile': require('./transports/htmlfile'), - 'websocket': require('./transports/websocket'), - 'xhr-multipart': require('./transports/xhr-multipart'), - 'xhr-polling': require('./transports/xhr-polling'), - 'jsonp-polling': require('./transports/jsonp-polling') - }, +var url = require('url') + , sys = require('sys') + , fs = require('fs') + , options = require('./utils').options + , Client = require('./client') + , clientVersion = require('./../../support/socket.io-client/lib/io').io.version + , transports = { + 'flashsocket': require('./transports/flashsocket') + , 'htmlfile': require('./transports/htmlfile') + , 'websocket': require('./transports/websocket') + , 'xhr-multipart': require('./transports/xhr-multipart') + , 'xhr-polling': require('./transports/xhr-polling') + , 'jsonp-polling': require('./transports/jsonp-polling') + }; -Listener = module.exports = function(server, options){ +var Listener = module.exports = function(server, options){ process.EventEmitter.call(this); var self = this; this.server = server; @@ -21,18 +21,7 @@ Listener = module.exports = function(server, options){ origins: '*:*', resource: 'socket.io', transports: ['websocket', 'flashsocket', 'htmlfile', 'xhr-multipart', 'xhr-polling', 'jsonp-polling'], - transportOptions: { - 'xhr-polling': { - timeout: null, // no heartbeats - closeTimeout: 8000, - duration: 20000 - }, - 'jsonp-polling': { - timeout: null, // no heartbeats - closeTimeout: 8000, - duration: 20000 - } - }, + transportOptions: {}, log: function(message){ sys.log(message); } diff --git a/lib/socket.io/transports/flashsocket.js b/lib/socket.io/transports/flashsocket.js index 2cef0b29..b8069733 100644 --- a/lib/socket.io/transports/flashsocket.js +++ b/lib/socket.io/transports/flashsocket.js @@ -1,9 +1,9 @@ -var net = require('net'), - WebSocket = require('./websocket'), - listeners = [], - netserver, +var net = require('net') + , WebSocket = require('./websocket') + , listeners = [] + , netserver; -Flashsocket = module.exports = function(){ +var Flashsocket = module.exports = function(){ WebSocket.apply(this, arguments); }; diff --git a/lib/socket.io/transports/htmlfile.js b/lib/socket.io/transports/htmlfile.js index fe14614d..32b147a5 100644 --- a/lib/socket.io/transports/htmlfile.js +++ b/lib/socket.io/transports/htmlfile.js @@ -1,7 +1,7 @@ -var Client = require('../client'), - qs = require('querystring'), +var Client = require('../client') + , qs = require('querystring'); -HTMLFile = module.exports = function(){ +var HTMLFile = module.exports = function(){ Client.apply(this, arguments); }; diff --git a/lib/socket.io/transports/jsonp-polling.js b/lib/socket.io/transports/jsonp-polling.js index 5a9c4855..8bc8f7fc 100644 --- a/lib/socket.io/transports/jsonp-polling.js +++ b/lib/socket.io/transports/jsonp-polling.js @@ -6,6 +6,14 @@ JSONPPolling = module.exports = function(){ require('sys').inherits(JSONPPolling, XHRPolling); +JSONPPolling.prototype.getOptions = function(){ + return { + timeout: null, // no heartbeats + closeTimeout: 8000, + duration: 20000 + }; +}; + JSONPPolling.prototype._onConnect = function(req, res){ this._index = req.url.match(/\/([0-9]+)\/?$/).pop(); XHRPolling.prototype._onConnect.call(this, req, res); diff --git a/lib/socket.io/transports/websocket.js b/lib/socket.io/transports/websocket.js index 4b82453c..6cbd663f 100644 --- a/lib/socket.io/transports/websocket.js +++ b/lib/socket.io/transports/websocket.js @@ -1,8 +1,8 @@ -var Client = require('../client'), - url = require('url'), - Buffer = require('buffer').Buffer, - crypto = require('crypto'), - net = require('net'), +var Client = require('../client') + , url = require('url') + , Buffer = require('buffer').Buffer + , crypto = require('crypto') + , net = require('net'); WebSocket = module.exports = function(){ Client.apply(this, arguments); diff --git a/lib/socket.io/transports/xhr-multipart.js b/lib/socket.io/transports/xhr-multipart.js index 174fd5be..89735cf6 100644 --- a/lib/socket.io/transports/xhr-multipart.js +++ b/lib/socket.io/transports/xhr-multipart.js @@ -1,7 +1,7 @@ -var Client = require('../client'), - qs = require('querystring'), +var Client = require('../client') + , qs = require('querystring'); -Multipart = module.exports = function(){ +var Multipart = module.exports = function(){ Client.apply(this, arguments); }; diff --git a/lib/socket.io/transports/xhr-polling.js b/lib/socket.io/transports/xhr-polling.js index efa7187b..c51a07df 100644 --- a/lib/socket.io/transports/xhr-polling.js +++ b/lib/socket.io/transports/xhr-polling.js @@ -1,12 +1,20 @@ -var Client = require('../client'), - qs = require('querystring'), +var Client = require('../client') + , qs = require('querystring'); -Polling = module.exports = function(){ +var Polling = module.exports = function(){ Client.apply(this, arguments); }; require('sys').inherits(Polling, Client); +Polling.prototype.getOptions = function(){ + return { + timeout: null, // no heartbeats + closeTimeout: 8000, + duration: 20000 + }; +}; + Polling.prototype._onConnect = function(req, res){ var self = this, body = ''; switch (req.method){ diff --git a/tests/index.js b/tests/index.js index de481697..7d22eb40 100644 --- a/tests/index.js +++ b/tests/index.js @@ -1,8 +1,8 @@ -var io = require('socket.io'), - Listener = io.Listener, - Client = require('socket.io/client'), - WebSocket = require('../support/node-websocket-client/lib/websocket').WebSocket, - empty = function(){}; +var io = require('socket.io') + , Listener = io.Listener + , Client = require('socket.io/client') + , WebSocket = require('../support/node-websocket-client/lib/websocket').WebSocket + , empty = function(){}; module.exports = { @@ -16,15 +16,15 @@ module.exports = { }, 100); }, - // 'test serving static javascript client': function(assert){ - // var server = require('http').createServer(function(){}), - // sio = io.listen(server, {log: empty}); - // assert.response(server, - // { url: '/socket.io/socket.io.js' }, - // { body: /setPath/, headers: { 'Content-Type': 'text/javascript' }}); - // assert.response(server, - // { url: '/socket.io/lib/vendor/web-socket-js/WebSocketMain.swf' }, - // { headers: { 'Content-Type': 'application/x-shockwave-flash' }}); - // } + 'test serving static javascript client': function(assert){ + var server = require('http').createServer(function(){}), + sio = io.listen(server, {log: empty}); + assert.response(server, + { url: '/socket.io/socket.io.js' }, + { body: /setPath/, headers: { 'Content-Type': 'text/javascript' }}); + assert.response(server, + { url: '/socket.io/lib/vendor/web-socket-js/WebSocketMain.swf' }, + { headers: { 'Content-Type': 'application/x-shockwave-flash' }}); + } }; \ No newline at end of file diff --git a/tests/transports.xhr-polling.js b/tests/transports.xhr-polling.js index 85a3c7aa..db5fdc78 100644 --- a/tests/transports.xhr-polling.js +++ b/tests/transports.xhr-polling.js @@ -24,6 +24,11 @@ function client(s){ function socket(server, options){ if (!options) options = {}; options.log = false; + if (!options.transportOptions) options.transportOptions = { + 'xhr-polling': { + closeTimeout: 100 + } + }; return io.listen(server, options); };