Pass server or port option to PeerServer

This allows to initialize websocket server properly
This commit is contained in:
Vsevolod Strukchinsky 2014-04-03 22:05:49 +06:00 committed by lmb
parent bcb585065b
commit 2ce55f8e33
3 changed files with 38 additions and 7 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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];