diff --git a/lib/server.js b/lib/server.js index f0e4cc6..4f3483a 100644 --- a/lib/server.js +++ b/lib/server.js @@ -25,7 +25,7 @@ function PeerServer(options) { // Connected clients this._clients = {}; - + // Messages waiting for another peer. this._outstanding = {}; @@ -35,12 +35,11 @@ function PeerServer(options) { // Initialize HTTP routes. This is only used for the first few milliseconds // before a socket is opened for a Peer. this._initializeHTTP(); - + // Mark concurrent users per ip this._ips = {}; this._setCleanupIntervals(); - }; util.inherits(PeerServer, EventEmitter); @@ -49,11 +48,10 @@ util.inherits(PeerServer, EventEmitter); /** Initialize WebSocket server. */ PeerServer.prototype._initializeWSS = function() { var self = this; - + // Create WebSocket server as well. this._wss = new WebSocketServer({ path: '/peerjs', server: this._httpServer }); - this._wss.on('connection', function(socket) { var query = url.parse(socket.upgradeReq.url, true).query; var id = query.id; @@ -88,10 +86,8 @@ PeerServer.prototype._initializeWSS = function() { PeerServer.prototype._configureWS = function(socket, key, id, token) { var self = this; - var client = this._clients[key][id]; - - + if (token === client.token) { // res 'close' event will delete client.res for us client.socket = socket; @@ -115,7 +111,7 @@ PeerServer.prototype._configureWS = function(socket, key, id, token) { self._removePeer(key, id); } }); - + // Handle messages from peers. socket.on('message', function(data) { try { @@ -181,7 +177,7 @@ PeerServer.prototype._checkKey = function(key, ip, cb) { /** Initialize HTTP server routes. */ PeerServer.prototype._initializeHTTP = function() { var self = this; - + this._app.use(restify.bodyParser({ mapParams: false })); this._app.use(restify.queryParser()) this._app.use(util.allowCrossDomain); @@ -199,7 +195,7 @@ PeerServer.prototype._initializeHTTP = function() { var token = req.params.token; var key = req.params.key; var ip = req.ip; - + if (!self._clients[key] || !self._clients[key][id]) { self._checkKey(key, ip, function(err) { if (!err && !self._clients[key][id]) { @@ -216,11 +212,10 @@ PeerServer.prototype._initializeHTTP = function() { return next(); }); - var handle = function(req, res, next) { var key = req.params.key; var id = req.params.id; - + var client; if (!self._clients[key] || !(client = self._clients[key][id])) { if (req.params.retry) { @@ -232,7 +227,7 @@ PeerServer.prototype._initializeHTTP = function() { } return; } - + // Auth the req if (req.params.token !== client.token) { res.send(401); @@ -248,7 +243,7 @@ PeerServer.prototype._initializeHTTP = function() { } return next(); }; - + this._app.post('/:key/:id/:token/offer', handle); this._app.post('/:key/:id/:token/candidate', handle); @@ -259,13 +254,12 @@ PeerServer.prototype._initializeHTTP = function() { // Listen on user-specified port. this._httpServer.listen(this._options.port); - }; /** Saves a streaming response and takes care of timeouts and headers. */ PeerServer.prototype._startStreaming = function(res, key, id, token, open) { var self = this; - + res.writeHead(200, {'Content-Type': 'application/octet-stream'}); var pad = '00'; @@ -273,13 +267,13 @@ PeerServer.prototype._startStreaming = function(res, key, id, token, open) { pad += pad; } res.write(pad + '\n'); - + if (open) { res.write(JSON.stringify({ type: 'OPEN' }) + '\n'); } - + var client = this._clients[key][id]; - + if (token === client.token) { // Client already exists res.on('close', function() { @@ -323,7 +317,7 @@ PeerServer.prototype._pruneOutstanding = function() { /** Cleanup */ PeerServer.prototype._setCleanupIntervals = function() { var self = this; - + // Clean up ips every 10 minutes setInterval(function() { var keys = Object.keys(self._ips); @@ -334,7 +328,7 @@ PeerServer.prototype._setCleanupIntervals = function() { } } }, 600000); - + // Clean up outstanding messages every 5 seconds setInterval(function() { self._pruneOutstanding();