text: /**
   * Module dependencies.
   */
  
  var http = require('http');
  
  /**
   * Invoking the library as a function delegates to attach if the first argument
   * is an `http.Server`.
   *
   * If there are no arguments or the first argument is an options object, then
   * a new Server instance is returned.
   *
   * @param {http.Server} server (if specified, will be attached to by the new Server instance)
   * @param {Object} options
   * @return {Server} engine server
   * @api public
   */
  
  exports = module.exports = function () {
    // backwards compatible use as `.attach`
    // if first argument is an http server
    if (arguments.length && arguments[0] instanceof http.Server) {
      return attach.apply(this, arguments);
    }
  
    // if first argument is not an http server, then just make a regular eio server
    return exports.Server.apply(null, arguments);
  };
  
  /**
   * Protocol revision number.
   *
   * @api public
   */
  
  exports.protocol = 1;
  
  /**
   * Expose Server constructor.
   *
   * @api public
   */
  
  exports.Server = require('./server');
  
  /**
   * Expose Socket constructor.
   *
   * @api public
   */
  
  exports.Socket = require('./socket');
  
  /**
   * Expose Transport constructor.
   *
   * @api public
   */
  
  exports.Transport = require('./transport');
  
  /**
   * Expose mutable list of available transports.
   *
   * @api public
   */
  
  exports.transports = require('./transports');
  
  /**
   * Exports parser.
   *
   * @api public
   */
  
  exports.parser = require('engine.io-parser');
  
  /**
   * Creates an http.Server exclusively used for WS upgrades.
   *
   * @param {Number} port
   * @param {Function} callback
   * @param {Object} options
   * @return {Server} websocket.io server
   * @api public
   */
  
  exports.listen = listen;
  
  function listen (port, options, fn) {
    if ('function' === typeof options) {
      fn = options;
      options = {};
    }
  
    var server = http.createServer(function (req, res) {
      res.writeHead(501);
      res.end('Not Implemented');
    });
  
    // create engine server
    var engine = exports.attach(server, options);
    engine.httpServer = server;
  
    server.listen(port, fn);
  
    return engine;
  }
  
  /**
   * Captures upgrade requests for a http.Server.
   *
   * @param {http.Server} server
   * @param {Object} options
   * @return {Server} engine server
   * @api public
   */
  
  exports.attach = attach;
  
  function attach (server, options) {
    var engine = new exports.Server(options);
    engine.attach(server, options);
    return engine;
  }
  