socketioMEANseed/server/node_modules/socket.io-client/lib/index.js
server/node_modules/socket.io-client/lib/index.jsRaw
1
2/**
3 * Module dependencies.
4 */
5
6var url = require('./url');
7var parser = require('socket.io-parser');
8var Manager = require('./manager');
9var debug = require('debug')('socket.io-client');
10
11/**
12 * Module exports.
13 */
14
15module.exports = exports = lookup;
16
17/**
18 * Managers cache.
19 */
20
21var cache = exports.managers = {};
22
23/**
24 * Looks up an existing `Manager` for multiplexing.
25 * If the user summons:
26 *
27 * `io('http://localhost/a');`
28 * `io('http://localhost/b');`
29 *
30 * We reuse the existing instance based on same scheme/port/host,
31 * and we initialize sockets for each namespace.
32 *
33 * @api public
34 */
35
36function lookup (uri, opts) {
37 if (typeof uri === 'object') {
38 opts = uri;
39 uri = undefined;
40 }
41
42 opts = opts || {};
43
44 var parsed = url(uri);
45 var source = parsed.source;
46 var id = parsed.id;
47 var path = parsed.path;
48 var sameNamespace = cache[id] && path in cache[id].nsps;
49 var newConnection = opts.forceNew || opts['force new connection'] ||
50 false === opts.multiplex || sameNamespace;
51
52 var io;
53
54 if (newConnection) {
55 debug('ignoring socket cache for %s', source);
56 io = Manager(source, opts);
57 } else {
58 if (!cache[id]) {
59 debug('new io instance for %s', source);
60 cache[id] = Manager(source, opts);
61 }
62 io = cache[id];
63 }
64 if (parsed.query && !opts.query) {
65 opts.query = parsed.query;
66 } else if (opts && 'object' === typeof opts.query) {
67 opts.query = encodeQueryString(opts.query);
68 }
69 return io.socket(parsed.path, opts);
70}
71/**
72 * Helper method to parse query objects to string.
73 * @param {object} query
74 * @returns {string}
75 */
76function encodeQueryString (obj) {
77 var str = [];
78 for (var p in obj) {
79 if (obj.hasOwnProperty(p)) {
80 str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]));
81 }
82 }
83 return str.join('&');
84}
85/**
86 * Protocol version.
87 *
88 * @api public
89 */
90
91exports.protocol = parser.protocol;
92
93/**
94 * `connect`.
95 *
96 * @param {String} uri
97 * @api public
98 */
99
100exports.connect = lookup;
101
102/**
103 * Expose constructors for standalone build.
104 *
105 * @api public
106 */
107
108exports.Manager = require('./manager');
109exports.Socket = require('./socket');