Pārlūkot izejas kodu

Pass `server` or `port` option to PeerServer

This allows to initialize websocket server properly
Vsevolod Strukchinsky 11 gadi atpakaļ
vecāks
revīzija
2ce55f8e33
3 mainītis faili ar 38 papildinājumiem un 7 dzēšanām
  1. 17 2
      README.md
  2. 19 4
      lib/index.js
  3. 2 1
      lib/server.js

+ 17 - 2
README.md

@@ -28,7 +28,7 @@ Or, create a custom server:
 
 ```javascript
 var PeerServer = require('peer').PeerServer;
-var server = new PeerServer({port: 9000, path: '/myapp'});
+var server = PeerServer({port: 9000, path: '/myapp'});
 ```
 
 Connecting to the server from PeerJS:
@@ -47,13 +47,28 @@ var fs = require('fs');
 var PeerServer = require('peer').PeerServer;
 
 var server = PeerServer({
+  port: 9000,
   ssl: {
     key: fs.readFileSync('/path/to/your/ssl/key/here.key'),
     certificate: fs.readFileSync('/path/to/your/ssl/certificate/here.crt')
   }
 });
+```
+
+### Combining with existing express app
+
+WebSocket server needs server instance to bootup, so we should create express app, then get server from `listen` method and only after that bind PeerServer to express application.
+
+```javascript
+var express = require('express');
+var app = express();
+var PeerServer = require('peer').PeerServer;
+
+app.get('/', function (req, res, next) { res.send('Hello world!'); });
+
+var server = app.listen(9000);
 
-server.listen(9000);
+app.use(PeerServer({ server: server, path: '/api' }));
 ```
 
 ### Events

+ 19 - 4
lib/index.js

@@ -1,18 +1,23 @@
 var express = require('express');
 var mixin = require('utils-merge');
 var proto = require('./server');
+var util = require('./util');
+var http = require('http');
 
 exports = module.exports = {
     PeerServer: createPeerServer
 };
 
-function createPeerServer(options) {
+function createPeerServer(options, callback) {
 
     var app = express();
 
     mixin(app, proto);
 
     app.options = {
+        host: '0.0.0.0',
+        port: null,
+        server: null,
         debug: false,
         timeout: 5000,
         key: 'peerjs',
@@ -46,9 +51,6 @@ function createPeerServer(options) {
     // Messages waiting for another peer.
     app._outstanding = {};
 
-    // Initailize WebSocket server handlers.
-    app._initializeWSS();
-
     // Initialize HTTP routes. This is only used for the first few milliseconds
     // before a socket is opened for a Peer.
     app._initializeHTTP();
@@ -58,5 +60,18 @@ function createPeerServer(options) {
 
     app._setCleanupIntervals();
 
+    app._server = options.server;
+
+    if (app.options.port) {
+        app._server = http.createServer(app);
+        app._server.listen(options.port, options.host, callback);
+    }
+
+    if (!app._server) {
+        throw new Error('Neither port or server is passed to constructor - can\'t start PeerServer');
+    }
+
+    app._initializeWSS();
+
     return app;
 }

+ 2 - 1
lib/server.js

@@ -10,7 +10,7 @@ app._initializeWSS = function() {
     var self = this;
 
     // Create WebSocket server as well.
-    this._wss = new WebSocketServer({ path: this.options.path + 'peerjs', server: this});
+    this._wss = new WebSocketServer({ path: this.options.path + 'peerjs', server: this._server});
 
     this._wss.on('connection', function(socket) {
         var query = url.parse(socket.upgradeReq.url, true).query;
@@ -45,6 +45,7 @@ app._initializeWSS = function() {
 };
 
 app._configureWS = function(socket, key, id, token) {
+
     var self = this;
     var client = this._clients[key][id];