|
|
/** * Module dependencies. */
var url = require('./url'); var parser = require('socket.io-parser'); var Manager = require('./manager'); var debug = require('debug')('socket.io-client');
/** * Module exports. */
module.exports = exports = lookup;
/** * Managers cache. */
var cache = exports.managers = {};
/** * Looks up an existing `Manager` for multiplexing. * If the user summons: * * `io('http://localhost/a');` * `io('http://localhost/b');` * * We reuse the existing instance based on same scheme/port/host, * and we initialize sockets for each namespace. * * @api public */
function lookup(uri, opts) { if (typeof uri == 'object') { opts = uri; uri = undefined; }
opts = opts || {};
var parsed = url(uri); var source = parsed.source; var id = parsed.id; var io;
if (opts.forceNew || opts['force new connection'] || false === opts.multiplex) { debug('ignoring socket cache for %s', source); io = Manager(source, opts); } else { if (!cache[id]) { debug('new io instance for %s', source); cache[id] = Manager(source, opts); } io = cache[id]; }
return io.socket(parsed.path); }
/** * Protocol version. * * @api public */
exports.protocol = parser.protocol;
/** * `connect`. * * @param {String} uri * @api public */
exports.connect = lookup;
/** * Expose constructors for standalone build. * * @api public */
exports.Manager = require('./manager'); exports.Socket = require('./socket');
|