text: var express = require('express');
  var proto = require('./server');
  var util = require('./util');
  var http = require('http');
  var https = require('https');
  
  function ExpressPeerServer(server, options) {
    var app = express();
  
    util.extend(app, proto);
  
    options = app._options = util.extend({
      debug: false,
      timeout: 5000,
      key: 'peerjs',
      ip_limit: 5000,
      concurrent_limit: 5000,
      allow_discovery: false,
      proxied: false
    }, options);
  
    // Connected clients
    app._clients = {};
  
    // Messages waiting for another peer.
    app._outstanding = {};
  
    // Mark concurrent users per ip
    app._ips = {};
  
    if (options.proxied) {
      app.set('trust proxy', options.proxied);
    }
  
    app.on('mount', function() {
      if (!server) {
        throw new Error('Server is not passed to constructor - '+
          'can\'t start PeerServer');
      }
  
      // Initialize HTTP routes. This is only used for the first few milliseconds
      // before a socket is opened for a Peer.
      app._initializeHTTP();
      app._setCleanupIntervals();
      app._initializeWSS(server);
    });
  
    return app;
  }
  
  function PeerServer(options, callback) {
    var app = express();
  
    options = options || {};
    var path = options.path || '/';
    var port = options.port || 80;
  
    delete options.path;
  
    if (path[0] !== '/') {
      path = '/' + path;
    }
  
    if (path[path.length - 1] !== '/') {
      path += '/';
    }
  
    var server;
    if (options.ssl) {
      if (options.ssl.certificate) {
        // Preserve compatibility with 0.2.7 API
        options.ssl.cert = options.ssl.certificate;
        delete options.ssl.certificate;
      }
  
      server = https.createServer(options.ssl, app);
      delete options.ssl;
    } else {
      server = http.createServer(app);
    }
  
    var peerjs = ExpressPeerServer(server, options);
    app.use(path, peerjs);
  
    if (callback) {
      server.listen(port, function() {
        callback(server);
      });
    } else {
      server.listen(port);
    }
  
    return peerjs;
  }
  
  exports = module.exports = {
    ExpressPeerServer: ExpressPeerServer,
    PeerServer: PeerServer
  };
  