|  | /** | 
|  | * 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; | 
|  | } |