| |
| /** |
| * 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 path = parsed.path; |
| var sameNamespace = cache[id] && path in cache[id].nsps; |
| var newConnection = opts.forceNew || opts['force new connection'] || |
| false === opts.multiplex || sameNamespace; |
| |
| var io; |
| |
| if (newConnection) { |
| 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]; |
| } |
| if (parsed.query && !opts.query) { |
| opts.query = parsed.query; |
| } |
| return io.socket(parsed.path, opts); |
| } |
| |
| /** |
| * 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'); |