浏览代码

more flexible leave option for peer v connections

Michelle Bu 12 年之前
父节点
当前提交
0d264b4119
共有 1 个文件被更改,包括 17 次插入16 次删除
  1. 17 16
      lib/server.js

+ 17 - 16
lib/server.js

@@ -7,14 +7,6 @@ var url = require('url');
 
 
 
-var allowCrossDomain = function(req, res, next) {
-  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);
   EventEmitter.call(this);
@@ -22,7 +14,7 @@ function PeerServer(options) {
   this._app = express();
   this._httpServer = http.createServer(this._app);
   this._app.use(express.bodyParser());
-  this._app.use(allowCrossDomain);
+  this._app.use(this._allowCrossDomain);
 
   options = util.extend({
     port: 80
@@ -52,7 +44,16 @@ function PeerServer(options) {
 
 util.inherits(PeerServer, EventEmitter);
 
-/* Initialize WebSocket server. */
+/** Handle CORS */
+PeerServer.prototype._allowCrossDomain = function(req, res, next) {
+  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();
+}
+
+/** Initialize WebSocket server. */
 PeerServer.prototype._initializeWSS = function() {
   var self = this;
   this._wss.on('connection', function(socket) {
@@ -84,6 +85,12 @@ PeerServer.prototype._initializeWSS = function() {
 
         switch (message.type) {
           case 'LEAVE':
+            // Clean up if a Peer sends a LEAVE.
+            if (!message.dst) {
+              delete self._clients[message.src];
+              delete self._timeouts[message.src];
+              break;
+            }
           // ICE candidates
           case 'CANDIDATE':
           // Offer or answer between peers.
@@ -92,12 +99,6 @@ PeerServer.prototype._initializeWSS = function() {
           // Firefoxism (connectDataConnection ports)
           case 'PORT':
             self._handleTransmission(message.type, message.src, message.dst, data);
-
-            // Clean up.
-            if (message.type === 'LEAVE') {
-              delete self._clients[message.src];
-              delete self._timeouts[message.src];
-            }
             break;
           default:
             util.prettyError('message unrecognized');