diff --git a/README.md b/README.md index 572d3d14..293a2773 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ The `Socket.IO` server provides seamless supports for a variety of transports in Requirements ------------ -- Node v0.1.94+ +- Node v0.1.102+ - [Socket.IO client](http://github.com/LearnBoost/Socket.IO) to connect from the browser How to use diff --git a/example/client b/example/client index 09094a21..c42d1888 160000 --- a/example/client +++ b/example/client @@ -1 +1 @@ -Subproject commit 09094a211495809e24da8bf915930c28ef2dc557 +Subproject commit c42d188872a590d4a684b447cfcbf95308b78002 diff --git a/example/server.js b/example/server.js index b3a91e81..d29b1af6 100644 --- a/example/server.js +++ b/example/server.js @@ -29,7 +29,7 @@ server = http.createServer(function(req, res){ res.end(); } catch(e){ send404(res); - } + } break; } @@ -47,6 +47,7 @@ var buffer = [], io = io.listen(server); io.on('connection', function(client){ + console.log('test'); client.send(json({ buffer: buffer })); client.broadcast(json({ announcement: client.sessionId + ' connected' })); diff --git a/index.js b/index.js index 8ed640c8..1c9081c3 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,4 @@ -var Listener = require('./lib/socket.io/listener'); - -this.listen = function(server, options){ - return new Listener(server, options); +exports.Listener = require('./lib/socket.io/listener'); +exports.listen = function(server, options){ + return new exports.Listener(server, options); }; \ No newline at end of file diff --git a/lib/socket.io/transports/flashsocket.js b/lib/socket.io/transports/flashsocket.js index d55b0aa6..e07a6842 100644 --- a/lib/socket.io/transports/flashsocket.js +++ b/lib/socket.io/transports/flashsocket.js @@ -1,8 +1,11 @@ var net = require('net'), WebSocket = require('./websocket'), listeners = [], + netserver, -Flashsocket = module.exports = function(){}; +Flashsocket = module.exports = function(){ + Client.apply(this, arguments); +}; require('sys').inherits(Flashsocket, WebSocket); @@ -10,10 +13,15 @@ Flashsocket.httpUpgrade = true; Flashsocket.init = function(listener){ listeners.push(listener); + listener.server.on('close', function(){ + try { + netserver.close(); + } catch(e){} + }); }; try { - net.createServer(function(socket){ + netserver = net.createServer(function(socket){ socket.write('\n'); socket.write('\n'); socket.write('\n'); diff --git a/lib/socket.io/transports/htmlfile.js b/lib/socket.io/transports/htmlfile.js index fa610c2a..86f190b3 100644 --- a/lib/socket.io/transports/htmlfile.js +++ b/lib/socket.io/transports/htmlfile.js @@ -1,7 +1,9 @@ var Client = require('../client'), qs = require('querystring'), -HTMLFile = module.exports = function(){}; +HTMLFile = module.exports = function(){ + Client.apply(this, arguments); +}; require('sys').inherits(HTMLFile, Client); diff --git a/lib/socket.io/transports/websocket.js b/lib/socket.io/transports/websocket.js index ad7eed43..c157e4d7 100644 --- a/lib/socket.io/transports/websocket.js +++ b/lib/socket.io/transports/websocket.js @@ -3,7 +3,9 @@ var Client = require('../client'), Buffer = require('buffer').Buffer, crypto = require('crypto'), -WebSocket = module.exports = function(){}; +WebSocket = module.exports = function(){ + Client.apply(this, arguments); +}; require('sys').inherits(WebSocket, Client); diff --git a/lib/socket.io/transports/xhr-multipart.js b/lib/socket.io/transports/xhr-multipart.js index e7ea901e..26502c8f 100644 --- a/lib/socket.io/transports/xhr-multipart.js +++ b/lib/socket.io/transports/xhr-multipart.js @@ -1,7 +1,9 @@ var Client = require('../client'), qs = require('querystring'), -Multipart = module.exports = function(){}; +Multipart = module.exports = function(){ + Client.apply(this, arguments); +}; require('sys').inherits(Multipart, Client); diff --git a/lib/socket.io/transports/xhr-polling.js b/lib/socket.io/transports/xhr-polling.js index eb9eebca..41f444f4 100644 --- a/lib/socket.io/transports/xhr-polling.js +++ b/lib/socket.io/transports/xhr-polling.js @@ -1,7 +1,9 @@ var Client = require('../client'), qs = require('querystring'), -Polling = module.exports = function(){}; +Polling = module.exports = function(){ + Client.apply(this, arguments); +}; require('sys').inherits(Polling, Client); diff --git a/tests/io.test.js b/tests/io.test.js new file mode 100644 index 00000000..227a13b8 --- /dev/null +++ b/tests/io.test.js @@ -0,0 +1,52 @@ +var io = require('./../'), + Listener = io.Listener, + Client = require('./../lib/socket.io/client'), + WebSocket = require('./support/node-websocket-client/lib/websocket').WebSocket, + empty = new Function, + port = 8080, + +create = function(fn){ + var server = require('http').createServer(empty), client; + server.listen(port, function(){ + client = new WebSocket('ws://localhost:'+ port++ +'/socket.io/websocket', 'borf'); + }); + return {server: server, client: client, close: function(){ + client.close(); + server.close(); + }}; +}; + +module.exports = { + 'test server initialization': function(assert){ + var http = create(), + sio = io.listen(http.server); + assert.ok(sio instanceof Listener); + http.close(); + }, + + 'test connection and handshake': function(assert){ + var server = require('http').createServer(empty), + sio = io.listen(server), + client, + clientCount = 0, + + close = function(){ + client.close(); + server.close(); + assert.ok(clientCount, 1); + }; + + server.listen(port, function(){ + client = new WebSocket('ws://localhost:'+ port++ +'/socket.io/websocket', 'borf'); + client.onmessage = function(){ + console.log('test'); + }; + }); + + sio.on('connection', function(client){ + console.log('test'); + clientCount++; + assert.ok(client instanceof Client); + }); + } +}; \ No newline at end of file