From 9a21d8ec7de84b6df3cdef75015633f0650642a9 Mon Sep 17 00:00:00 2001 From: Michelle Bu Date: Thu, 31 Jan 2013 13:34:01 -0800 Subject: [PATCH] xhr streaming works --- lib/server.js | 73 +++++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/lib/server.js b/lib/server.js index a67e41e..b537d27 100644 --- a/lib/server.js +++ b/lib/server.js @@ -5,12 +5,15 @@ var EventEmitter = require('events').EventEmitter; var WebSocketServer = require('ws').Server; var url = require('url'); + + var allowCrossDomain = function(req, res, next) { - res.header('Access-Control-Allow-Origin', '*'); - res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); - res.header('Access-Control-Allow-Headers', 'Content-Type'); + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); + res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); + next(); -}; +} function PeerServer(options) { if (!(this instanceof PeerServer)) return new PeerServer(options); @@ -18,11 +21,8 @@ function PeerServer(options) { this._app = express(); this._httpServer = http.createServer(this._app); - var self = this; - this._app.configure(function() { - self._app.use(express.bodyParser()); - self._app.use(allowCrossDomain); - }); + this._app.use(express.bodyParser()); + this._app.use(allowCrossDomain); options = util.extend({ port: 80 @@ -102,6 +102,10 @@ PeerServer.prototype._initializeWSS = function() { PeerServer.prototype._initializeHTTP = function() { var self = this; + this._app.options('/*', function(req, res, next) { + res.send(200); + }); + // Server sets up HTTP streaming whether you get or post an ID. // Retrieve guaranteed random ID. this._app.get('/id', function(req, res) { @@ -123,39 +127,46 @@ PeerServer.prototype._initializeHTTP = function() { this._app.post('/offer', function(req, res) { // TODO: if offer person does not exist, set a timeout for 10s. may need to // change switch. - var data = req.body.data; - var src = data.src; - var dst = data.dst; - self._handleTransmission('OFFER', src, dst, JSON.stringify(data)); + var src = req.body.src; + var dst = req.body.dst; + self._handleTransmission('OFFER', src, dst, JSON.stringify(req.body)); + res.send('success'); + }); + + this._app.post('/ice', function(req, res) { + var src = req.body.src; + var dst = req.body.dst; + self._handleTransmission('ICE', src, dst, JSON.stringify(req.body)); + res.send('success'); }); this._app.post('/answer', function(req, res) { - var data = req.body.data; - var src = data.src; - var dst = data.dst; - self._handleTransmission('ANSWER', src, dst, JSON.stringify(data)); + var src = req.body.src; + var dst = req.body.dst; + self._handleTransmission('ANSWER', src, dst, JSON.stringify(req.body)); + res.send('success'); }); }; /** Saves a streaming response and takes care of timeouts and headers. */ PeerServer.prototype._startStreaming = function(res, id, write) { - res.writeHead(200, {'Content-Type': 'application/octet-stream'}); - if (!!write) { - write(); - } + res.writeHead(200, {'Content-Type': 'application/octet-stream'}); + if (!!write) { + write(); + } - var pad = '00'; - var iterations = 10; - for (var i = 0; i < iterations; i++) { - pad += pad; - } - res.write(pad + '\n'); + var pad = '00'; + var iterations = 10; + for (var i = 0; i < iterations; i++) { + pad += pad; + } + res.write(pad + '\n'); - // Save res so we can write to it. - this._clients[id] = res; + // Save res so we can write to it. + this._clients[id] = res; - // Set timeout to expire. - this._timeouts[id] = setTimeout(function() { res.end('end') }, 10000); + // Set timeout to expire. + this._timeouts[id] = setTimeout(function() { res.end('end') }, 10000); }; // TODO: fix for streaming