diff --git a/README.md b/README.md index 2e8c8b1..7b679b0 100644 --- a/README.md +++ b/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') } }); +``` -server.listen(9000); +### 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); + +app.use(PeerServer({ server: server, path: '/api' })); ``` ### Events diff --git a/lib/index.js b/lib/index.js index aafcbc0..66a33fc 100644 --- a/lib/index.js +++ b/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; } diff --git a/lib/server.js b/lib/server.js index 307bfe2..edbfeca 100644 --- a/lib/server.js +++ b/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];