socket.io-rails 1.0.6 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae004a0e89d45dcf2aab359f03c9371f722ac8ea
4
- data.tar.gz: 9caad930a2db41dbd687fdebf23d58758dee98b8
3
+ metadata.gz: acd50b944e9b106826449319a56e8abb42babc3b
4
+ data.tar.gz: 26707ba9d3f949a928d364cb149e1a6346132e59
5
5
  SHA512:
6
- metadata.gz: 7589d32f8ad710d3cd080054f396ea949a7d08e09055c95218e48e700881261ea7a15b75498295fe9fab7935c061c26de84c4c06583c44f9be31eb1b5d3753de
7
- data.tar.gz: 78d7ffb75cb350a3b398e258ede2a457aef1d669a285e9fd5cb63351945f8dad964e1ec6d261a23ec550019f597809027967dc46e93cb8c185154b5237805956
6
+ metadata.gz: 86a259d2f72aab4a4f0b885edb4f55f5dc958e72610b67bd8371ea8f972ae23137b3b59a450464474b49dab34fd816072d36b9a2a421e8d9d75a7b39d67bf2d7
7
+ data.tar.gz: fb502bf4aeb5475bafa3e8ded80caf736c77a1a2731227a8150ffc162e728f6b376cd0951361f79bed58ba308aaf075f1367576c9c09f5772a1406914121907e
@@ -1,5 +1,5 @@
1
1
  module Socketio
2
2
  module Rails
3
- VERSION = "1.0.6"
3
+ VERSION = "1.2.0"
4
4
  end
5
5
  end
@@ -1,18 +1,17 @@
1
- !function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.io=e():"undefined"!=typeof global?global.io=e():"undefined"!=typeof self&&(self.io=e())}(function(){var define,module,exports;
2
- return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
1
+ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.io=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
3
2
 
4
- module.exports = require('./lib/');
3
+ module.exports = _dereq_('./lib/');
5
4
 
6
- },{"./lib/":2}],2:[function(require,module,exports){
5
+ },{"./lib/":2}],2:[function(_dereq_,module,exports){
7
6
 
8
7
  /**
9
8
  * Module dependencies.
10
9
  */
11
10
 
12
- var url = require('./url');
13
- var parser = require('socket.io-parser');
14
- var Manager = require('./manager');
15
- var debug = require('debug')('socket.io-client');
11
+ var url = _dereq_('./url');
12
+ var parser = _dereq_('socket.io-parser');
13
+ var Manager = _dereq_('./manager');
14
+ var debug = _dereq_('debug')('socket.io-client');
16
15
 
17
16
  /**
18
17
  * Module exports.
@@ -89,24 +88,25 @@ exports.connect = lookup;
89
88
  * @api public
90
89
  */
91
90
 
92
- exports.Manager = require('./manager');
93
- exports.Socket = require('./socket');
91
+ exports.Manager = _dereq_('./manager');
92
+ exports.Socket = _dereq_('./socket');
94
93
 
95
- },{"./manager":3,"./socket":5,"./url":6,"debug":9,"socket.io-parser":40}],3:[function(require,module,exports){
94
+ },{"./manager":3,"./socket":5,"./url":6,"debug":9,"socket.io-parser":40}],3:[function(_dereq_,module,exports){
96
95
 
97
96
  /**
98
97
  * Module dependencies.
99
98
  */
100
99
 
101
- var url = require('./url');
102
- var eio = require('engine.io-client');
103
- var Socket = require('./socket');
104
- var Emitter = require('component-emitter');
105
- var parser = require('socket.io-parser');
106
- var on = require('./on');
107
- var bind = require('component-bind');
108
- var object = require('object-component');
109
- var debug = require('debug')('socket.io-client:manager');
100
+ var url = _dereq_('./url');
101
+ var eio = _dereq_('engine.io-client');
102
+ var Socket = _dereq_('./socket');
103
+ var Emitter = _dereq_('component-emitter');
104
+ var parser = _dereq_('socket.io-parser');
105
+ var on = _dereq_('./on');
106
+ var bind = _dereq_('component-bind');
107
+ var object = _dereq_('object-component');
108
+ var debug = _dereq_('debug')('socket.io-client:manager');
109
+ var indexOf = _dereq_('indexof');
110
110
 
111
111
  /**
112
112
  * Module exports
@@ -141,13 +141,14 @@ function Manager(uri, opts){
141
141
  this.timeout(null == opts.timeout ? 20000 : opts.timeout);
142
142
  this.readyState = 'closed';
143
143
  this.uri = uri;
144
- this.connected = 0;
144
+ this.connected = [];
145
145
  this.attempts = 0;
146
146
  this.encoding = false;
147
147
  this.packetBuffer = [];
148
148
  this.encoder = new parser.Encoder();
149
149
  this.decoder = new parser.Decoder();
150
- this.open();
150
+ this.autoConnect = opts.autoConnect !== false;
151
+ if (this.autoConnect) this.open();
151
152
  }
152
153
 
153
154
  /**
@@ -246,7 +247,8 @@ Manager.prototype.timeout = function(v){
246
247
  */
247
248
 
248
249
  Manager.prototype.maybeReconnectOnOpen = function() {
249
- if (!this.openReconnect && !this.reconnecting && this._reconnection) {
250
+ // Only try to reconnect if it's the first time we're connecting
251
+ if (!this.openReconnect && !this.reconnecting && this._reconnection && this.attempts === 0) {
250
252
  // keeps reconnection from firing twice for the same reconnection loop
251
253
  this.openReconnect = true;
252
254
  this.reconnect();
@@ -272,6 +274,7 @@ Manager.prototype.connect = function(fn){
272
274
  var socket = this.engine;
273
275
  var self = this;
274
276
  this.readyState = 'opening';
277
+ this.skipReconnect = false;
275
278
 
276
279
  // emit `open`
277
280
  var openSub = on(socket, 'open', function() {
@@ -390,7 +393,9 @@ Manager.prototype.socket = function(nsp){
390
393
  this.nsps[nsp] = socket;
391
394
  var self = this;
392
395
  socket.on('connect', function(){
393
- self.connected++;
396
+ if (!~indexOf(self.connected, socket)) {
397
+ self.connected.push(socket);
398
+ }
394
399
  });
395
400
  }
396
401
  return socket;
@@ -403,7 +408,11 @@ Manager.prototype.socket = function(nsp){
403
408
  */
404
409
 
405
410
  Manager.prototype.destroy = function(socket){
406
- --this.connected || this.close();
411
+ var index = indexOf(this.connected, socket);
412
+ if (~index) this.connected.splice(index, 1);
413
+ if (this.connected.length) return;
414
+
415
+ this.close();
407
416
  };
408
417
 
409
418
  /**
@@ -471,7 +480,8 @@ Manager.prototype.cleanup = function(){
471
480
  Manager.prototype.close =
472
481
  Manager.prototype.disconnect = function(){
473
482
  this.skipReconnect = true;
474
- this.engine.close();
483
+ this.readyState = 'closed';
484
+ this.engine && this.engine.close();
475
485
  };
476
486
 
477
487
  /**
@@ -497,7 +507,7 @@ Manager.prototype.onclose = function(reason){
497
507
  */
498
508
 
499
509
  Manager.prototype.reconnect = function(){
500
- if (this.reconnecting) return this;
510
+ if (this.reconnecting || this.skipReconnect) return this;
501
511
 
502
512
  var self = this;
503
513
  this.attempts++;
@@ -513,9 +523,15 @@ Manager.prototype.reconnect = function(){
513
523
 
514
524
  this.reconnecting = true;
515
525
  var timer = setTimeout(function(){
526
+ if (self.skipReconnect) return;
527
+
516
528
  debug('attempting reconnect');
517
529
  self.emitAll('reconnect_attempt', self.attempts);
518
530
  self.emitAll('reconnecting', self.attempts);
531
+
532
+ // check again for the case socket closed in above events
533
+ if (self.skipReconnect) return;
534
+
519
535
  self.open(function(err){
520
536
  if (err) {
521
537
  debug('reconnect attempt error');
@@ -550,7 +566,7 @@ Manager.prototype.onreconnect = function(){
550
566
  this.emitAll('reconnect', attempt);
551
567
  };
552
568
 
553
- },{"./on":4,"./socket":5,"./url":6,"component-bind":7,"component-emitter":8,"debug":9,"engine.io-client":11,"object-component":37,"socket.io-parser":40}],4:[function(require,module,exports){
569
+ },{"./on":4,"./socket":5,"./url":6,"component-bind":7,"component-emitter":8,"debug":9,"engine.io-client":10,"indexof":36,"object-component":37,"socket.io-parser":40}],4:[function(_dereq_,module,exports){
554
570
 
555
571
  /**
556
572
  * Module exports.
@@ -576,20 +592,19 @@ function on(obj, ev, fn) {
576
592
  };
577
593
  }
578
594
 
579
- },{}],5:[function(require,module,exports){
595
+ },{}],5:[function(_dereq_,module,exports){
580
596
 
581
597
  /**
582
598
  * Module dependencies.
583
599
  */
584
600
 
585
- var parser = require('socket.io-parser');
586
- var Emitter = require('component-emitter');
587
- var toArray = require('to-array');
588
- var on = require('./on');
589
- var bind = require('component-bind');
590
- var debug = require('debug')('socket.io-client:socket');
591
- var hasBin = require('has-binary-data');
592
- var indexOf = require('indexof');
601
+ var parser = _dereq_('socket.io-parser');
602
+ var Emitter = _dereq_('component-emitter');
603
+ var toArray = _dereq_('to-array');
604
+ var on = _dereq_('./on');
605
+ var bind = _dereq_('component-bind');
606
+ var debug = _dereq_('debug')('socket.io-client:socket');
607
+ var hasBin = _dereq_('has-binary');
593
608
 
594
609
  /**
595
610
  * Module exports.
@@ -635,12 +650,11 @@ function Socket(io, nsp){
635
650
  this.json = this; // compat
636
651
  this.ids = 0;
637
652
  this.acks = {};
638
- this.open();
653
+ if (this.io.autoConnect) this.open();
639
654
  this.receiveBuffer = [];
640
655
  this.sendBuffer = [];
641
656
  this.connected = false;
642
657
  this.disconnected = true;
643
- this.subEvents();
644
658
  }
645
659
 
646
660
  /**
@@ -656,6 +670,8 @@ Emitter(Socket.prototype);
656
670
  */
657
671
 
658
672
  Socket.prototype.subEvents = function() {
673
+ if (this.subs) return;
674
+
659
675
  var io = this.io;
660
676
  this.subs = [
661
677
  on(io, 'open', bind(this, 'onopen')),
@@ -665,15 +681,16 @@ Socket.prototype.subEvents = function() {
665
681
  };
666
682
 
667
683
  /**
668
- * Called upon engine `open`.
684
+ * "Opens" the socket.
669
685
  *
670
- * @api private
686
+ * @api public
671
687
  */
672
688
 
673
689
  Socket.prototype.open =
674
690
  Socket.prototype.connect = function(){
675
691
  if (this.connected) return this;
676
692
 
693
+ this.subEvents();
677
694
  this.io.open(); // ensure open
678
695
  if ('open' == this.io.readyState) this.onopen();
679
696
  return this;
@@ -742,7 +759,7 @@ Socket.prototype.packet = function(packet){
742
759
  };
743
760
 
744
761
  /**
745
- * "Opens" the socket.
762
+ * Called upon engine `open`.
746
763
  *
747
764
  * @api private
748
765
  */
@@ -926,9 +943,12 @@ Socket.prototype.ondisconnect = function(){
926
943
  */
927
944
 
928
945
  Socket.prototype.destroy = function(){
929
- // clean subscriptions to avoid reconnections
930
- for (var i = 0; i < this.subs.length; i++) {
931
- this.subs[i].destroy();
946
+ if (this.subs) {
947
+ // clean subscriptions to avoid reconnections
948
+ for (var i = 0; i < this.subs.length; i++) {
949
+ this.subs[i].destroy();
950
+ }
951
+ this.subs = null;
932
952
  }
933
953
 
934
954
  this.io.destroy(this);
@@ -943,27 +963,30 @@ Socket.prototype.destroy = function(){
943
963
 
944
964
  Socket.prototype.close =
945
965
  Socket.prototype.disconnect = function(){
946
- if (!this.connected) return this;
947
-
948
- debug('performing disconnect (%s)', this.nsp);
949
- this.packet({ type: parser.DISCONNECT });
966
+ if (this.connected) {
967
+ debug('performing disconnect (%s)', this.nsp);
968
+ this.packet({ type: parser.DISCONNECT });
969
+ }
950
970
 
951
971
  // remove socket from pool
952
972
  this.destroy();
953
973
 
954
- // fire events
955
- this.onclose('io client disconnect');
974
+ if (this.connected) {
975
+ // fire events
976
+ this.onclose('io client disconnect');
977
+ }
956
978
  return this;
957
979
  };
958
980
 
959
- },{"./on":4,"component-bind":7,"component-emitter":8,"debug":9,"has-binary-data":32,"indexof":36,"socket.io-parser":40,"to-array":43}],6:[function(require,module,exports){
960
- var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};
981
+ },{"./on":4,"component-bind":7,"component-emitter":8,"debug":9,"has-binary":32,"socket.io-parser":40,"to-array":44}],6:[function(_dereq_,module,exports){
982
+ (function (global){
983
+
961
984
  /**
962
985
  * Module dependencies.
963
986
  */
964
987
 
965
- var parseuri = require('parseuri');
966
- var debug = require('debug')('socket.io-client:url');
988
+ var parseuri = _dereq_('parseuri');
989
+ var debug = _dereq_('debug')('socket.io-client:url');
967
990
 
968
991
  /**
969
992
  * Module exports.
@@ -990,7 +1013,9 @@ function url(uri, loc){
990
1013
  // relative path support
991
1014
  if ('string' == typeof uri) {
992
1015
  if ('/' == uri.charAt(0)) {
993
- if ('undefined' != typeof loc) {
1016
+ if ('/' == uri.charAt(1)) {
1017
+ uri = loc.protocol + uri;
1018
+ } else {
994
1019
  uri = loc.hostname + uri;
995
1020
  }
996
1021
  }
@@ -1029,7 +1054,8 @@ function url(uri, loc){
1029
1054
  return obj;
1030
1055
  }
1031
1056
 
1032
- },{"debug":9,"parseuri":38}],7:[function(require,module,exports){
1057
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
1058
+ },{"debug":9,"parseuri":38}],7:[function(_dereq_,module,exports){
1033
1059
  /**
1034
1060
  * Slice reference.
1035
1061
  */
@@ -1054,7 +1080,7 @@ module.exports = function(obj, fn){
1054
1080
  }
1055
1081
  };
1056
1082
 
1057
- },{}],8:[function(require,module,exports){
1083
+ },{}],8:[function(_dereq_,module,exports){
1058
1084
 
1059
1085
  /**
1060
1086
  * Expose `Emitter`.
@@ -1220,7 +1246,7 @@ Emitter.prototype.hasListeners = function(event){
1220
1246
  return !! this.listeners(event).length;
1221
1247
  };
1222
1248
 
1223
- },{}],9:[function(require,module,exports){
1249
+ },{}],9:[function(_dereq_,module,exports){
1224
1250
 
1225
1251
  /**
1226
1252
  * Expose `debug()` as the module.
@@ -1359,177 +1385,13 @@ try {
1359
1385
  if (window.localStorage) debug.enable(localStorage.debug);
1360
1386
  } catch(e){}
1361
1387
 
1362
- },{}],10:[function(require,module,exports){
1363
-
1364
- /**
1365
- * Module dependencies.
1366
- */
1367
-
1368
- var index = require('indexof');
1369
-
1370
- /**
1371
- * Expose `Emitter`.
1372
- */
1373
-
1374
- module.exports = Emitter;
1375
-
1376
- /**
1377
- * Initialize a new `Emitter`.
1378
- *
1379
- * @api public
1380
- */
1381
-
1382
- function Emitter(obj) {
1383
- if (obj) return mixin(obj);
1384
- };
1385
-
1386
- /**
1387
- * Mixin the emitter properties.
1388
- *
1389
- * @param {Object} obj
1390
- * @return {Object}
1391
- * @api private
1392
- */
1393
-
1394
- function mixin(obj) {
1395
- for (var key in Emitter.prototype) {
1396
- obj[key] = Emitter.prototype[key];
1397
- }
1398
- return obj;
1399
- }
1400
-
1401
- /**
1402
- * Listen on the given `event` with `fn`.
1403
- *
1404
- * @param {String} event
1405
- * @param {Function} fn
1406
- * @return {Emitter}
1407
- * @api public
1408
- */
1409
-
1410
- Emitter.prototype.on = function(event, fn){
1411
- this._callbacks = this._callbacks || {};
1412
- (this._callbacks[event] = this._callbacks[event] || [])
1413
- .push(fn);
1414
- return this;
1415
- };
1416
-
1417
- /**
1418
- * Adds an `event` listener that will be invoked a single
1419
- * time then automatically removed.
1420
- *
1421
- * @param {String} event
1422
- * @param {Function} fn
1423
- * @return {Emitter}
1424
- * @api public
1425
- */
1388
+ },{}],10:[function(_dereq_,module,exports){
1426
1389
 
1427
- Emitter.prototype.once = function(event, fn){
1428
- var self = this;
1429
- this._callbacks = this._callbacks || {};
1390
+ module.exports = _dereq_('./lib/');
1430
1391
 
1431
- function on() {
1432
- self.off(event, on);
1433
- fn.apply(this, arguments);
1434
- }
1392
+ },{"./lib/":11}],11:[function(_dereq_,module,exports){
1435
1393
 
1436
- fn._off = on;
1437
- this.on(event, on);
1438
- return this;
1439
- };
1440
-
1441
- /**
1442
- * Remove the given callback for `event` or all
1443
- * registered callbacks.
1444
- *
1445
- * @param {String} event
1446
- * @param {Function} fn
1447
- * @return {Emitter}
1448
- * @api public
1449
- */
1450
-
1451
- Emitter.prototype.off =
1452
- Emitter.prototype.removeListener =
1453
- Emitter.prototype.removeAllListeners = function(event, fn){
1454
- this._callbacks = this._callbacks || {};
1455
-
1456
- // all
1457
- if (0 == arguments.length) {
1458
- this._callbacks = {};
1459
- return this;
1460
- }
1461
-
1462
- // specific event
1463
- var callbacks = this._callbacks[event];
1464
- if (!callbacks) return this;
1465
-
1466
- // remove all handlers
1467
- if (1 == arguments.length) {
1468
- delete this._callbacks[event];
1469
- return this;
1470
- }
1471
-
1472
- // remove specific handler
1473
- var i = index(callbacks, fn._off || fn);
1474
- if (~i) callbacks.splice(i, 1);
1475
- return this;
1476
- };
1477
-
1478
- /**
1479
- * Emit `event` with the given args.
1480
- *
1481
- * @param {String} event
1482
- * @param {Mixed} ...
1483
- * @return {Emitter}
1484
- */
1485
-
1486
- Emitter.prototype.emit = function(event){
1487
- this._callbacks = this._callbacks || {};
1488
- var args = [].slice.call(arguments, 1)
1489
- , callbacks = this._callbacks[event];
1490
-
1491
- if (callbacks) {
1492
- callbacks = callbacks.slice(0);
1493
- for (var i = 0, len = callbacks.length; i < len; ++i) {
1494
- callbacks[i].apply(this, args);
1495
- }
1496
- }
1497
-
1498
- return this;
1499
- };
1500
-
1501
- /**
1502
- * Return array of callbacks for `event`.
1503
- *
1504
- * @param {String} event
1505
- * @return {Array}
1506
- * @api public
1507
- */
1508
-
1509
- Emitter.prototype.listeners = function(event){
1510
- this._callbacks = this._callbacks || {};
1511
- return this._callbacks[event] || [];
1512
- };
1513
-
1514
- /**
1515
- * Check if this emitter has `event` handlers.
1516
- *
1517
- * @param {String} event
1518
- * @return {Boolean}
1519
- * @api public
1520
- */
1521
-
1522
- Emitter.prototype.hasListeners = function(event){
1523
- return !! this.listeners(event).length;
1524
- };
1525
-
1526
- },{"indexof":36}],11:[function(require,module,exports){
1527
-
1528
- module.exports = require('./lib/');
1529
-
1530
- },{"./lib/":12}],12:[function(require,module,exports){
1531
-
1532
- module.exports = require('./socket');
1394
+ module.exports = _dereq_('./socket');
1533
1395
 
1534
1396
  /**
1535
1397
  * Exports parser
@@ -1537,21 +1399,22 @@ module.exports = require('./socket');
1537
1399
  * @api public
1538
1400
  *
1539
1401
  */
1540
- module.exports.parser = require('engine.io-parser');
1402
+ module.exports.parser = _dereq_('engine.io-parser');
1541
1403
 
1542
- },{"./socket":13,"engine.io-parser":22}],13:[function(require,module,exports){
1543
- var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};/**
1404
+ },{"./socket":12,"engine.io-parser":21}],12:[function(_dereq_,module,exports){
1405
+ (function (global){
1406
+ /**
1544
1407
  * Module dependencies.
1545
1408
  */
1546
1409
 
1547
- var transports = require('./transports');
1548
- var Emitter = require('component-emitter');
1549
- var debug = require('debug')('engine.io-client:socket');
1550
- var index = require('indexof');
1551
- var parser = require('engine.io-parser');
1552
- var parseuri = require('parseuri');
1553
- var parsejson = require('parsejson');
1554
- var parseqs = require('parseqs');
1410
+ var transports = _dereq_('./transports');
1411
+ var Emitter = _dereq_('component-emitter');
1412
+ var debug = _dereq_('debug')('engine.io-client:socket');
1413
+ var index = _dereq_('indexof');
1414
+ var parser = _dereq_('engine.io-parser');
1415
+ var parseuri = _dereq_('parseuri');
1416
+ var parsejson = _dereq_('parsejson');
1417
+ var parseqs = _dereq_('parseqs');
1555
1418
 
1556
1419
  /**
1557
1420
  * Module exports.
@@ -1613,7 +1476,9 @@ function Socket(uri, opts){
1613
1476
  this.upgrade = false !== opts.upgrade;
1614
1477
  this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/';
1615
1478
  this.forceJSONP = !!opts.forceJSONP;
1479
+ this.jsonp = false !== opts.jsonp;
1616
1480
  this.forceBase64 = !!opts.forceBase64;
1481
+ this.enablesXDR = !!opts.enablesXDR;
1617
1482
  this.timestampParam = opts.timestampParam || 't';
1618
1483
  this.timestampRequests = opts.timestampRequests;
1619
1484
  this.transports = opts.transports || ['polling', 'websocket'];
@@ -1649,9 +1514,9 @@ Socket.protocol = parser.protocol; // this is an int
1649
1514
  */
1650
1515
 
1651
1516
  Socket.Socket = Socket;
1652
- Socket.Transport = require('./transport');
1653
- Socket.transports = require('./transports');
1654
- Socket.parser = require('engine.io-parser');
1517
+ Socket.Transport = _dereq_('./transport');
1518
+ Socket.transports = _dereq_('./transports');
1519
+ Socket.parser = _dereq_('engine.io-parser');
1655
1520
 
1656
1521
  /**
1657
1522
  * Creates transport of the given type.
@@ -1682,7 +1547,9 @@ Socket.prototype.createTransport = function (name) {
1682
1547
  path: this.path,
1683
1548
  query: query,
1684
1549
  forceJSONP: this.forceJSONP,
1550
+ jsonp: this.jsonp,
1685
1551
  forceBase64: this.forceBase64,
1552
+ enablesXDR: this.enablesXDR,
1686
1553
  timestampRequests: this.timestampRequests,
1687
1554
  timestampParam: this.timestampParam,
1688
1555
  policyPort: this.policyPort,
@@ -1711,11 +1578,28 @@ Socket.prototype.open = function () {
1711
1578
  var transport;
1712
1579
  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') != -1) {
1713
1580
  transport = 'websocket';
1581
+ } else if (0 == this.transports.length) {
1582
+ // Emit error on next tick so it can be listened to
1583
+ var self = this;
1584
+ setTimeout(function() {
1585
+ self.emit('error', 'No transports available');
1586
+ }, 0);
1587
+ return;
1714
1588
  } else {
1715
1589
  transport = this.transports[0];
1716
1590
  }
1717
1591
  this.readyState = 'opening';
1718
- var transport = this.createTransport(transport);
1592
+
1593
+ // Retry with the next transport if the transport is disabled (jsonp: false)
1594
+ var transport;
1595
+ try {
1596
+ transport = this.createTransport(transport);
1597
+ } catch (e) {
1598
+ this.transports.shift();
1599
+ this.open();
1600
+ return;
1601
+ }
1602
+
1719
1603
  transport.open();
1720
1604
  this.setTransport(transport);
1721
1605
  };
@@ -1784,14 +1668,13 @@ Socket.prototype.probe = function (name) {
1784
1668
  debug('probe transport "%s" pong', name);
1785
1669
  self.upgrading = true;
1786
1670
  self.emit('upgrading', transport);
1671
+ if (!transport) return;
1787
1672
  Socket.priorWebsocketSuccess = 'websocket' == transport.name;
1788
1673
 
1789
1674
  debug('pausing current transport "%s"', self.transport.name);
1790
1675
  self.transport.pause(function () {
1791
1676
  if (failed) return;
1792
- if ('closed' == self.readyState || 'closing' == self.readyState) {
1793
- return;
1794
- }
1677
+ if ('closed' == self.readyState) return;
1795
1678
  debug('changing transport and sending upgrade packet');
1796
1679
 
1797
1680
  cleanup();
@@ -2073,6 +1956,10 @@ Socket.prototype.send = function (msg, fn) {
2073
1956
  */
2074
1957
 
2075
1958
  Socket.prototype.sendPacket = function (type, data, fn) {
1959
+ if ('closing' == this.readyState || 'closed' == this.readyState) {
1960
+ return;
1961
+ }
1962
+
2076
1963
  var packet = { type: type, data: data };
2077
1964
  this.emit('packetCreate', packet);
2078
1965
  this.writeBuffer.push(packet);
@@ -2088,9 +1975,41 @@ Socket.prototype.sendPacket = function (type, data, fn) {
2088
1975
 
2089
1976
  Socket.prototype.close = function () {
2090
1977
  if ('opening' == this.readyState || 'open' == this.readyState) {
2091
- this.onClose('forced close');
2092
- debug('socket closing - telling transport to close');
2093
- this.transport.close();
1978
+ this.readyState = 'closing';
1979
+
1980
+ var self = this;
1981
+
1982
+ function close() {
1983
+ self.onClose('forced close');
1984
+ debug('socket closing - telling transport to close');
1985
+ self.transport.close();
1986
+ }
1987
+
1988
+ function cleanupAndClose() {
1989
+ self.removeListener('upgrade', cleanupAndClose);
1990
+ self.removeListener('upgradeError', cleanupAndClose);
1991
+ close();
1992
+ }
1993
+
1994
+ function waitForUpgrade() {
1995
+ // wait for upgrade to finish since we can't send packets while pausing a transport
1996
+ self.once('upgrade', cleanupAndClose);
1997
+ self.once('upgradeError', cleanupAndClose);
1998
+ }
1999
+
2000
+ if (this.writeBuffer.length) {
2001
+ this.once('drain', function() {
2002
+ if (this.upgrading) {
2003
+ waitForUpgrade();
2004
+ } else {
2005
+ close();
2006
+ }
2007
+ });
2008
+ } else if (this.upgrading) {
2009
+ waitForUpgrade();
2010
+ } else {
2011
+ close();
2012
+ }
2094
2013
  }
2095
2014
 
2096
2015
  return this;
@@ -2116,7 +2035,7 @@ Socket.prototype.onError = function (err) {
2116
2035
  */
2117
2036
 
2118
2037
  Socket.prototype.onClose = function (reason, desc) {
2119
- if ('opening' == this.readyState || 'open' == this.readyState) {
2038
+ if ('opening' == this.readyState || 'open' == this.readyState || 'closing' == this.readyState) {
2120
2039
  debug('socket close with reason: "%s"', reason);
2121
2040
  var self = this;
2122
2041
 
@@ -2168,13 +2087,14 @@ Socket.prototype.filterUpgrades = function (upgrades) {
2168
2087
  return filteredUpgrades;
2169
2088
  };
2170
2089
 
2171
- },{"./transport":14,"./transports":15,"component-emitter":8,"debug":9,"engine.io-parser":22,"indexof":36,"parsejson":29,"parseqs":30,"parseuri":38}],14:[function(require,module,exports){
2090
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
2091
+ },{"./transport":13,"./transports":14,"component-emitter":8,"debug":9,"engine.io-parser":21,"indexof":36,"parsejson":28,"parseqs":29,"parseuri":30}],13:[function(_dereq_,module,exports){
2172
2092
  /**
2173
2093
  * Module dependencies.
2174
2094
  */
2175
2095
 
2176
- var parser = require('engine.io-parser');
2177
- var Emitter = require('component-emitter');
2096
+ var parser = _dereq_('engine.io-parser');
2097
+ var Emitter = _dereq_('component-emitter');
2178
2098
 
2179
2099
  /**
2180
2100
  * Module exports.
@@ -2200,6 +2120,7 @@ function Transport (opts) {
2200
2120
  this.readyState = '';
2201
2121
  this.agent = opts.agent || false;
2202
2122
  this.socket = opts.socket;
2123
+ this.enablesXDR = opts.enablesXDR;
2203
2124
  }
2204
2125
 
2205
2126
  /**
@@ -2296,13 +2217,8 @@ Transport.prototype.onOpen = function () {
2296
2217
  */
2297
2218
 
2298
2219
  Transport.prototype.onData = function(data){
2299
- try {
2300
- var packet = parser.decodePacket(data, this.socket.binaryType);
2301
- this.onPacket(packet);
2302
- } catch(e){
2303
- e.data = data;
2304
- this.onError('parser decode error', e);
2305
- }
2220
+ var packet = parser.decodePacket(data, this.socket.binaryType);
2221
+ this.onPacket(packet);
2306
2222
  };
2307
2223
 
2308
2224
  /**
@@ -2324,15 +2240,16 @@ Transport.prototype.onClose = function () {
2324
2240
  this.emit('close');
2325
2241
  };
2326
2242
 
2327
- },{"component-emitter":8,"engine.io-parser":22}],15:[function(require,module,exports){
2328
- var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};/**
2243
+ },{"component-emitter":8,"engine.io-parser":21}],14:[function(_dereq_,module,exports){
2244
+ (function (global){
2245
+ /**
2329
2246
  * Module dependencies
2330
2247
  */
2331
2248
 
2332
- var XMLHttpRequest = require('xmlhttprequest');
2333
- var XHR = require('./polling-xhr');
2334
- var JSONP = require('./polling-jsonp');
2335
- var websocket = require('./websocket');
2249
+ var XMLHttpRequest = _dereq_('xmlhttprequest');
2250
+ var XHR = _dereq_('./polling-xhr');
2251
+ var JSONP = _dereq_('./polling-jsonp');
2252
+ var websocket = _dereq_('./websocket');
2336
2253
 
2337
2254
  /**
2338
2255
  * Export transports.
@@ -2351,6 +2268,8 @@ exports.websocket = websocket;
2351
2268
  function polling(opts){
2352
2269
  var xhr;
2353
2270
  var xd = false;
2271
+ var xs = false;
2272
+ var jsonp = false !== opts.jsonp;
2354
2273
 
2355
2274
  if (global.location) {
2356
2275
  var isSSL = 'https:' == location.protocol;
@@ -2362,26 +2281,31 @@ function polling(opts){
2362
2281
  }
2363
2282
 
2364
2283
  xd = opts.hostname != location.hostname || port != opts.port;
2284
+ xs = opts.secure != isSSL;
2365
2285
  }
2366
2286
 
2367
2287
  opts.xdomain = xd;
2288
+ opts.xscheme = xs;
2368
2289
  xhr = new XMLHttpRequest(opts);
2369
2290
 
2370
2291
  if ('open' in xhr && !opts.forceJSONP) {
2371
2292
  return new XHR(opts);
2372
2293
  } else {
2294
+ if (!jsonp) throw new Error('JSONP disabled');
2373
2295
  return new JSONP(opts);
2374
2296
  }
2375
2297
  }
2376
2298
 
2377
- },{"./polling-jsonp":16,"./polling-xhr":17,"./websocket":19,"xmlhttprequest":20}],16:[function(require,module,exports){
2378
- var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};
2299
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
2300
+ },{"./polling-jsonp":15,"./polling-xhr":16,"./websocket":18,"xmlhttprequest":19}],15:[function(_dereq_,module,exports){
2301
+ (function (global){
2302
+
2379
2303
  /**
2380
2304
  * Module requirements.
2381
2305
  */
2382
2306
 
2383
- var Polling = require('./polling');
2384
- var inherit = require('component-inherit');
2307
+ var Polling = _dereq_('./polling');
2308
+ var inherit = _dereq_('component-inherit');
2385
2309
 
2386
2310
  /**
2387
2311
  * Module exports.
@@ -2481,6 +2405,7 @@ JSONPPolling.prototype.doClose = function () {
2481
2405
  if (this.form) {
2482
2406
  this.form.parentNode.removeChild(this.form);
2483
2407
  this.form = null;
2408
+ this.iframe = null;
2484
2409
  }
2485
2410
 
2486
2411
  Polling.prototype.doClose.call(this);
@@ -2512,7 +2437,7 @@ JSONPPolling.prototype.doPoll = function () {
2512
2437
  this.script = script;
2513
2438
 
2514
2439
  var isUAgecko = 'undefined' != typeof navigator && /gecko/i.test(navigator.userAgent);
2515
-
2440
+
2516
2441
  if (isUAgecko) {
2517
2442
  setTimeout(function () {
2518
2443
  var iframe = document.createElement('iframe');
@@ -2608,16 +2533,18 @@ JSONPPolling.prototype.doWrite = function (data, fn) {
2608
2533
  }
2609
2534
  };
2610
2535
 
2611
- },{"./polling":18,"component-inherit":21}],17:[function(require,module,exports){
2612
- var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};/**
2536
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
2537
+ },{"./polling":17,"component-inherit":20}],16:[function(_dereq_,module,exports){
2538
+ (function (global){
2539
+ /**
2613
2540
  * Module requirements.
2614
2541
  */
2615
2542
 
2616
- var XMLHttpRequest = require('xmlhttprequest');
2617
- var Polling = require('./polling');
2618
- var Emitter = require('component-emitter');
2619
- var inherit = require('component-inherit');
2620
- var debug = require('debug')('engine.io-client:polling-xhr');
2543
+ var XMLHttpRequest = _dereq_('xmlhttprequest');
2544
+ var Polling = _dereq_('./polling');
2545
+ var Emitter = _dereq_('component-emitter');
2546
+ var inherit = _dereq_('component-inherit');
2547
+ var debug = _dereq_('debug')('engine.io-client:polling-xhr');
2621
2548
 
2622
2549
  /**
2623
2550
  * Module exports.
@@ -2653,6 +2580,7 @@ function XHR(opts){
2653
2580
 
2654
2581
  this.xd = opts.hostname != global.location.hostname ||
2655
2582
  port != opts.port;
2583
+ this.xs = opts.secure != isSSL;
2656
2584
  }
2657
2585
  }
2658
2586
 
@@ -2679,8 +2607,10 @@ XHR.prototype.request = function(opts){
2679
2607
  opts = opts || {};
2680
2608
  opts.uri = this.uri();
2681
2609
  opts.xd = this.xd;
2610
+ opts.xs = this.xs;
2682
2611
  opts.agent = this.agent || false;
2683
2612
  opts.supportsBinary = this.supportsBinary;
2613
+ opts.enablesXDR = this.enablesXDR;
2684
2614
  return new Request(opts);
2685
2615
  };
2686
2616
 
@@ -2733,10 +2663,14 @@ function Request(opts){
2733
2663
  this.method = opts.method || 'GET';
2734
2664
  this.uri = opts.uri;
2735
2665
  this.xd = !!opts.xd;
2666
+ this.xs = !!opts.xs;
2736
2667
  this.async = false !== opts.async;
2737
2668
  this.data = undefined != opts.data ? opts.data : null;
2738
2669
  this.agent = opts.agent;
2739
- this.create(opts.isBinary, opts.supportsBinary);
2670
+ this.isBinary = opts.isBinary;
2671
+ this.supportsBinary = opts.supportsBinary;
2672
+ this.enablesXDR = opts.enablesXDR;
2673
+ this.create();
2740
2674
  }
2741
2675
 
2742
2676
  /**
@@ -2751,14 +2685,14 @@ Emitter(Request.prototype);
2751
2685
  * @api private
2752
2686
  */
2753
2687
 
2754
- Request.prototype.create = function(isBinary, supportsBinary){
2755
- var xhr = this.xhr = new XMLHttpRequest({ agent: this.agent, xdomain: this.xd });
2688
+ Request.prototype.create = function(){
2689
+ var xhr = this.xhr = new XMLHttpRequest({ agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR });
2756
2690
  var self = this;
2757
2691
 
2758
2692
  try {
2759
2693
  debug('xhr open %s: %s', this.method, this.uri);
2760
2694
  xhr.open(this.method, this.uri, this.async);
2761
- if (supportsBinary) {
2695
+ if (this.supportsBinary) {
2762
2696
  // This has to be done after open because Firefox is stupid
2763
2697
  // http://stackoverflow.com/questions/13216903/get-binary-data-with-xmlhttprequest-in-a-firefox-extension
2764
2698
  xhr.responseType = 'arraybuffer';
@@ -2766,7 +2700,7 @@ Request.prototype.create = function(isBinary, supportsBinary){
2766
2700
 
2767
2701
  if ('POST' == this.method) {
2768
2702
  try {
2769
- if (isBinary) {
2703
+ if (this.isBinary) {
2770
2704
  xhr.setRequestHeader('Content-type', 'application/octet-stream');
2771
2705
  } else {
2772
2706
  xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');
@@ -2779,22 +2713,18 @@ Request.prototype.create = function(isBinary, supportsBinary){
2779
2713
  xhr.withCredentials = true;
2780
2714
  }
2781
2715
 
2782
- xhr.onreadystatechange = function(){
2783
- var data;
2784
-
2785
- try {
2716
+ if (this.hasXDR()) {
2717
+ xhr.onload = function(){
2718
+ self.onLoad();
2719
+ };
2720
+ xhr.onerror = function(){
2721
+ self.onError(xhr.responseText);
2722
+ };
2723
+ } else {
2724
+ xhr.onreadystatechange = function(){
2786
2725
  if (4 != xhr.readyState) return;
2787
2726
  if (200 == xhr.status || 1223 == xhr.status) {
2788
- var contentType = xhr.getResponseHeader('Content-Type');
2789
- if (contentType === 'application/octet-stream') {
2790
- data = xhr.response;
2791
- } else {
2792
- if (!supportsBinary) {
2793
- data = xhr.responseText;
2794
- } else {
2795
- data = 'ok';
2796
- }
2797
- }
2727
+ self.onLoad();
2798
2728
  } else {
2799
2729
  // make sure the `error` event handler that's user-set
2800
2730
  // does not throw in the same tick and gets caught here
@@ -2802,14 +2732,8 @@ Request.prototype.create = function(isBinary, supportsBinary){
2802
2732
  self.onError(xhr.status);
2803
2733
  }, 0);
2804
2734
  }
2805
- } catch (e) {
2806
- self.onError(e);
2807
- }
2808
-
2809
- if (null != data) {
2810
- self.onData(data);
2811
- }
2812
- };
2735
+ };
2736
+ }
2813
2737
 
2814
2738
  debug('xhr data %s', this.data);
2815
2739
  xhr.send(this.data);
@@ -2873,7 +2797,11 @@ Request.prototype.cleanup = function(){
2873
2797
  return;
2874
2798
  }
2875
2799
  // xmlhttprequest
2876
- this.xhr.onreadystatechange = empty;
2800
+ if (this.hasXDR()) {
2801
+ this.xhr.onload = this.xhr.onerror = empty;
2802
+ } else {
2803
+ this.xhr.onreadystatechange = empty;
2804
+ }
2877
2805
 
2878
2806
  try {
2879
2807
  this.xhr.abort();
@@ -2886,6 +2814,46 @@ Request.prototype.cleanup = function(){
2886
2814
  this.xhr = null;
2887
2815
  };
2888
2816
 
2817
+ /**
2818
+ * Called upon load.
2819
+ *
2820
+ * @api private
2821
+ */
2822
+
2823
+ Request.prototype.onLoad = function(){
2824
+ var data;
2825
+ try {
2826
+ var contentType;
2827
+ try {
2828
+ contentType = this.xhr.getResponseHeader('Content-Type').split(';')[0];
2829
+ } catch (e) {}
2830
+ if (contentType === 'application/octet-stream') {
2831
+ data = this.xhr.response;
2832
+ } else {
2833
+ if (!this.supportsBinary) {
2834
+ data = this.xhr.responseText;
2835
+ } else {
2836
+ data = 'ok';
2837
+ }
2838
+ }
2839
+ } catch (e) {
2840
+ this.onError(e);
2841
+ }
2842
+ if (null != data) {
2843
+ this.onData(data);
2844
+ }
2845
+ };
2846
+
2847
+ /**
2848
+ * Check if it has XDomainRequest.
2849
+ *
2850
+ * @api private
2851
+ */
2852
+
2853
+ Request.prototype.hasXDR = function(){
2854
+ return 'undefined' !== typeof global.XDomainRequest && !this.xs && this.enablesXDR;
2855
+ };
2856
+
2889
2857
  /**
2890
2858
  * Aborts the request.
2891
2859
  *
@@ -2920,16 +2888,17 @@ function unloadHandler() {
2920
2888
  }
2921
2889
  }
2922
2890
 
2923
- },{"./polling":18,"component-emitter":8,"component-inherit":21,"debug":9,"xmlhttprequest":20}],18:[function(require,module,exports){
2891
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
2892
+ },{"./polling":17,"component-emitter":8,"component-inherit":20,"debug":9,"xmlhttprequest":19}],17:[function(_dereq_,module,exports){
2924
2893
  /**
2925
2894
  * Module dependencies.
2926
2895
  */
2927
2896
 
2928
- var Transport = require('../transport');
2929
- var parseqs = require('parseqs');
2930
- var parser = require('engine.io-parser');
2931
- var inherit = require('component-inherit');
2932
- var debug = require('debug')('engine.io-client:polling');
2897
+ var Transport = _dereq_('../transport');
2898
+ var parseqs = _dereq_('parseqs');
2899
+ var parser = _dereq_('engine.io-parser');
2900
+ var inherit = _dereq_('component-inherit');
2901
+ var debug = _dereq_('debug')('engine.io-client:polling');
2933
2902
 
2934
2903
  /**
2935
2904
  * Module exports.
@@ -2942,8 +2911,8 @@ module.exports = Polling;
2942
2911
  */
2943
2912
 
2944
2913
  var hasXHR2 = (function() {
2945
- var XMLHttpRequest = require('xmlhttprequest');
2946
- var xhr = new XMLHttpRequest({ agent: this.agent, xdomain: false });
2914
+ var XMLHttpRequest = _dereq_('xmlhttprequest');
2915
+ var xhr = new XMLHttpRequest({ xdomain: false });
2947
2916
  return null != xhr.responseType;
2948
2917
  })();
2949
2918
 
@@ -3167,16 +3136,16 @@ Polling.prototype.uri = function(){
3167
3136
  return schema + '://' + this.hostname + port + this.path + query;
3168
3137
  };
3169
3138
 
3170
- },{"../transport":14,"component-inherit":21,"debug":9,"engine.io-parser":22,"parseqs":30,"xmlhttprequest":20}],19:[function(require,module,exports){
3139
+ },{"../transport":13,"component-inherit":20,"debug":9,"engine.io-parser":21,"parseqs":29,"xmlhttprequest":19}],18:[function(_dereq_,module,exports){
3171
3140
  /**
3172
3141
  * Module dependencies.
3173
3142
  */
3174
3143
 
3175
- var Transport = require('../transport');
3176
- var parser = require('engine.io-parser');
3177
- var parseqs = require('parseqs');
3178
- var inherit = require('component-inherit');
3179
- var debug = require('debug')('engine.io-client:websocket');
3144
+ var Transport = _dereq_('../transport');
3145
+ var parser = _dereq_('engine.io-parser');
3146
+ var parseqs = _dereq_('parseqs');
3147
+ var inherit = _dereq_('component-inherit');
3148
+ var debug = _dereq_('debug')('engine.io-client:websocket');
3180
3149
 
3181
3150
  /**
3182
3151
  * `ws` exposes a WebSocket-compatible interface in
@@ -3184,7 +3153,7 @@ var debug = require('debug')('engine.io-client:websocket');
3184
3153
  * in the browser.
3185
3154
  */
3186
3155
 
3187
- var WebSocket = require('ws');
3156
+ var WebSocket = _dereq_('ws');
3188
3157
 
3189
3158
  /**
3190
3159
  * Module exports.
@@ -3398,13 +3367,21 @@ WS.prototype.check = function(){
3398
3367
  return !!WebSocket && !('__initialize' in WebSocket && this.name === WS.prototype.name);
3399
3368
  };
3400
3369
 
3401
- },{"../transport":14,"component-inherit":21,"debug":9,"engine.io-parser":22,"parseqs":30,"ws":31}],20:[function(require,module,exports){
3370
+ },{"../transport":13,"component-inherit":20,"debug":9,"engine.io-parser":21,"parseqs":29,"ws":31}],19:[function(_dereq_,module,exports){
3402
3371
  // browser shim for xmlhttprequest module
3403
- var hasCORS = require('has-cors');
3372
+ var hasCORS = _dereq_('has-cors');
3404
3373
 
3405
3374
  module.exports = function(opts) {
3406
3375
  var xdomain = opts.xdomain;
3407
3376
 
3377
+ // scheme must be same when usign XDomainRequest
3378
+ // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
3379
+ var xscheme = opts.xscheme;
3380
+
3381
+ // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.
3382
+ // https://github.com/Automattic/engine.io-client/pull/217
3383
+ var enablesXDR = opts.enablesXDR;
3384
+
3408
3385
  // XMLHttpRequest can be disabled on IE
3409
3386
  try {
3410
3387
  if ('undefined' != typeof XMLHttpRequest && (!xdomain || hasCORS)) {
@@ -3412,6 +3389,15 @@ module.exports = function(opts) {
3412
3389
  }
3413
3390
  } catch (e) { }
3414
3391
 
3392
+ // Use XDomainRequest for IE8 if enablesXDR is true
3393
+ // because loading bar keeps flashing when using jsonp-polling
3394
+ // https://github.com/yujiosaka/socke.io-ie8-loading-example
3395
+ try {
3396
+ if ('undefined' != typeof XDomainRequest && !xscheme && enablesXDR) {
3397
+ return new XDomainRequest();
3398
+ }
3399
+ } catch (e) { }
3400
+
3415
3401
  if (!xdomain) {
3416
3402
  try {
3417
3403
  return new ActiveXObject('Microsoft.XMLHTTP');
@@ -3419,7 +3405,7 @@ module.exports = function(opts) {
3419
3405
  }
3420
3406
  }
3421
3407
 
3422
- },{"has-cors":34}],21:[function(require,module,exports){
3408
+ },{"has-cors":34}],20:[function(_dereq_,module,exports){
3423
3409
 
3424
3410
  module.exports = function(a, b){
3425
3411
  var fn = function(){};
@@ -3427,16 +3413,17 @@ module.exports = function(a, b){
3427
3413
  a.prototype = new fn;
3428
3414
  a.prototype.constructor = a;
3429
3415
  };
3430
- },{}],22:[function(require,module,exports){
3431
- var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};/**
3416
+ },{}],21:[function(_dereq_,module,exports){
3417
+ (function (global){
3418
+ /**
3432
3419
  * Module dependencies.
3433
3420
  */
3434
3421
 
3435
- var keys = require('./keys');
3436
- var sliceBuffer = require('arraybuffer.slice');
3437
- var base64encoder = require('base64-arraybuffer');
3438
- var after = require('after');
3439
- var utf8 = require('utf8');
3422
+ var keys = _dereq_('./keys');
3423
+ var sliceBuffer = _dereq_('arraybuffer.slice');
3424
+ var base64encoder = _dereq_('base64-arraybuffer');
3425
+ var after = _dereq_('after');
3426
+ var utf8 = _dereq_('utf8');
3440
3427
 
3441
3428
  /**
3442
3429
  * Check if we are running an android browser. That requires us to use
@@ -3451,7 +3438,7 @@ var isAndroid = navigator.userAgent.match(/Android/i);
3451
3438
  * Current protocol version.
3452
3439
  */
3453
3440
 
3454
- exports.protocol = 2;
3441
+ exports.protocol = 3;
3455
3442
 
3456
3443
  /**
3457
3444
  * Packet types.
@@ -3479,7 +3466,7 @@ var err = { type: 'error', data: 'parser error' };
3479
3466
  * Create a blob api even for blob builder when vendor prefixes exist
3480
3467
  */
3481
3468
 
3482
- var Blob = require('blob');
3469
+ var Blob = _dereq_('blob');
3483
3470
 
3484
3471
  /**
3485
3472
  * Encodes a packet.
@@ -3497,12 +3484,17 @@ var Blob = require('blob');
3497
3484
  * @api private
3498
3485
  */
3499
3486
 
3500
- exports.encodePacket = function (packet, supportsBinary, callback) {
3501
- if (typeof supportsBinary == 'function') {
3487
+ exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
3488
+ if ('function' == typeof supportsBinary) {
3502
3489
  callback = supportsBinary;
3503
3490
  supportsBinary = false;
3504
3491
  }
3505
3492
 
3493
+ if ('function' == typeof utf8encode) {
3494
+ callback = utf8encode;
3495
+ utf8encode = null;
3496
+ }
3497
+
3506
3498
  var data = (packet.data === undefined)
3507
3499
  ? undefined
3508
3500
  : packet.data.buffer || packet.data;
@@ -3518,7 +3510,7 @@ exports.encodePacket = function (packet, supportsBinary, callback) {
3518
3510
 
3519
3511
  // data fragment is optional
3520
3512
  if (undefined !== packet.data) {
3521
- encoded += utf8.encode(String(packet.data));
3513
+ encoded += utf8encode ? utf8.encode(String(packet.data)) : String(packet.data);
3522
3514
  }
3523
3515
 
3524
3516
  return callback('' + encoded);
@@ -3554,7 +3546,7 @@ function encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {
3554
3546
  var fr = new FileReader();
3555
3547
  fr.onload = function() {
3556
3548
  packet.data = fr.result;
3557
- exports.encodePacket(packet, supportsBinary, callback);
3549
+ exports.encodePacket(packet, supportsBinary, true, callback);
3558
3550
  };
3559
3551
  return fr.readAsArrayBuffer(packet.data);
3560
3552
  }
@@ -3616,14 +3608,20 @@ exports.encodeBase64Packet = function(packet, callback) {
3616
3608
  * @api private
3617
3609
  */
3618
3610
 
3619
- exports.decodePacket = function (data, binaryType) {
3611
+ exports.decodePacket = function (data, binaryType, utf8decode) {
3620
3612
  // String data
3621
3613
  if (typeof data == 'string' || data === undefined) {
3622
3614
  if (data.charAt(0) == 'b') {
3623
3615
  return exports.decodeBase64Packet(data.substr(1), binaryType);
3624
3616
  }
3625
3617
 
3626
- data = utf8.decode(data);
3618
+ if (utf8decode) {
3619
+ try {
3620
+ data = utf8.decode(data);
3621
+ } catch (e) {
3622
+ return err;
3623
+ }
3624
+ }
3627
3625
  var type = data.charAt(0);
3628
3626
 
3629
3627
  if (Number(type) != type || !packetslist[type]) {
@@ -3707,7 +3705,7 @@ exports.encodePayload = function (packets, supportsBinary, callback) {
3707
3705
  }
3708
3706
 
3709
3707
  function encodeOne(packet, doneCallback) {
3710
- exports.encodePacket(packet, supportsBinary, function(message) {
3708
+ exports.encodePacket(packet, supportsBinary, true, function(message) {
3711
3709
  doneCallback(null, setLengthHeader(message));
3712
3710
  });
3713
3711
  }
@@ -3783,7 +3781,7 @@ exports.decodePayload = function (data, binaryType, callback) {
3783
3781
  }
3784
3782
 
3785
3783
  if (msg.length) {
3786
- packet = exports.decodePacket(msg, binaryType);
3784
+ packet = exports.decodePacket(msg, binaryType, true);
3787
3785
 
3788
3786
  if (err.type == packet.type && err.data == packet.data) {
3789
3787
  // parser error in individual packet - ignoring payload
@@ -3827,7 +3825,7 @@ exports.encodePayloadAsArrayBuffer = function(packets, callback) {
3827
3825
  }
3828
3826
 
3829
3827
  function encodeOne(packet, doneCallback) {
3830
- exports.encodePacket(packet, true, function(data) {
3828
+ exports.encodePacket(packet, true, true, function(data) {
3831
3829
  return doneCallback(null, data);
3832
3830
  });
3833
3831
  }
@@ -3885,7 +3883,7 @@ exports.encodePayloadAsArrayBuffer = function(packets, callback) {
3885
3883
 
3886
3884
  exports.encodePayloadAsBlob = function(packets, callback) {
3887
3885
  function encodeOne(packet, doneCallback) {
3888
- exports.encodePacket(packet, true, function(encoded) {
3886
+ exports.encodePacket(packet, true, true, function(encoded) {
3889
3887
  var binaryIdentifier = new Uint8Array(1);
3890
3888
  binaryIdentifier[0] = 1;
3891
3889
  if (typeof encoded === 'string') {
@@ -3938,14 +3936,25 @@ exports.decodePayloadAsBinary = function (data, binaryType, callback) {
3938
3936
  var bufferTail = data;
3939
3937
  var buffers = [];
3940
3938
 
3939
+ var numberTooLong = false;
3941
3940
  while (bufferTail.byteLength > 0) {
3942
3941
  var tailArray = new Uint8Array(bufferTail);
3943
3942
  var isString = tailArray[0] === 0;
3944
3943
  var msgLength = '';
3944
+
3945
3945
  for (var i = 1; ; i++) {
3946
3946
  if (tailArray[i] == 255) break;
3947
+
3948
+ if (msgLength.length > 310) {
3949
+ numberTooLong = true;
3950
+ break;
3951
+ }
3952
+
3947
3953
  msgLength += tailArray[i];
3948
3954
  }
3955
+
3956
+ if(numberTooLong) return callback(err, 0, 1);
3957
+
3949
3958
  bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);
3950
3959
  msgLength = parseInt(msgLength);
3951
3960
 
@@ -3962,17 +3971,19 @@ exports.decodePayloadAsBinary = function (data, binaryType, callback) {
3962
3971
  }
3963
3972
  }
3964
3973
  }
3974
+
3965
3975
  buffers.push(msg);
3966
3976
  bufferTail = sliceBuffer(bufferTail, msgLength);
3967
3977
  }
3968
3978
 
3969
3979
  var total = buffers.length;
3970
3980
  buffers.forEach(function(buffer, i) {
3971
- callback(exports.decodePacket(buffer, binaryType), i, total);
3981
+ callback(exports.decodePacket(buffer, binaryType, true), i, total);
3972
3982
  });
3973
3983
  };
3974
3984
 
3975
- },{"./keys":23,"after":24,"arraybuffer.slice":25,"base64-arraybuffer":26,"blob":27,"utf8":28}],23:[function(require,module,exports){
3985
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
3986
+ },{"./keys":22,"after":23,"arraybuffer.slice":24,"base64-arraybuffer":25,"blob":26,"utf8":27}],22:[function(_dereq_,module,exports){
3976
3987
 
3977
3988
  /**
3978
3989
  * Gets the keys for an object.
@@ -3993,7 +4004,7 @@ module.exports = Object.keys || function keys (obj){
3993
4004
  return arr;
3994
4005
  };
3995
4006
 
3996
- },{}],24:[function(require,module,exports){
4007
+ },{}],23:[function(_dereq_,module,exports){
3997
4008
  module.exports = after
3998
4009
 
3999
4010
  function after(count, callback, err_cb) {
@@ -4023,7 +4034,7 @@ function after(count, callback, err_cb) {
4023
4034
 
4024
4035
  function noop() {}
4025
4036
 
4026
- },{}],25:[function(require,module,exports){
4037
+ },{}],24:[function(_dereq_,module,exports){
4027
4038
  /**
4028
4039
  * An abstraction for slicing an arraybuffer even when
4029
4040
  * ArrayBuffer.prototype.slice is not supported
@@ -4054,7 +4065,7 @@ module.exports = function(arraybuffer, start, end) {
4054
4065
  return result.buffer;
4055
4066
  };
4056
4067
 
4057
- },{}],26:[function(require,module,exports){
4068
+ },{}],25:[function(_dereq_,module,exports){
4058
4069
  /*
4059
4070
  * base64-arraybuffer
4060
4071
  * https://github.com/niklasvh/base64-arraybuffer
@@ -4115,8 +4126,9 @@ module.exports = function(arraybuffer, start, end) {
4115
4126
  };
4116
4127
  })("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
4117
4128
 
4118
- },{}],27:[function(require,module,exports){
4119
- var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};/**
4129
+ },{}],26:[function(_dereq_,module,exports){
4130
+ (function (global){
4131
+ /**
4120
4132
  * Create a blob builder even when vendor prefixes exist
4121
4133
  */
4122
4134
 
@@ -4166,249 +4178,253 @@ module.exports = (function() {
4166
4178
  }
4167
4179
  })();
4168
4180
 
4169
- },{}],28:[function(require,module,exports){
4170
- var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};/*! http://mths.be/utf8js v2.0.0 by @mathias */
4181
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
4182
+ },{}],27:[function(_dereq_,module,exports){
4183
+ (function (global){
4184
+ /*! http://mths.be/utf8js v2.0.0 by @mathias */
4171
4185
  ;(function(root) {
4172
4186
 
4173
- // Detect free variables `exports`
4174
- var freeExports = typeof exports == 'object' && exports;
4175
-
4176
- // Detect free variable `module`
4177
- var freeModule = typeof module == 'object' && module &&
4178
- module.exports == freeExports && module;
4179
-
4180
- // Detect free variable `global`, from Node.js or Browserified code,
4181
- // and use it as `root`
4182
- var freeGlobal = typeof global == 'object' && global;
4183
- if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
4184
- root = freeGlobal;
4185
- }
4186
-
4187
- /*--------------------------------------------------------------------------*/
4188
-
4189
- var stringFromCharCode = String.fromCharCode;
4190
-
4191
- // Taken from http://mths.be/punycode
4192
- function ucs2decode(string) {
4193
- var output = [];
4194
- var counter = 0;
4195
- var length = string.length;
4196
- var value;
4197
- var extra;
4198
- while (counter < length) {
4199
- value = string.charCodeAt(counter++);
4200
- if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
4201
- // high surrogate, and there is a next character
4202
- extra = string.charCodeAt(counter++);
4203
- if ((extra & 0xFC00) == 0xDC00) { // low surrogate
4204
- output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
4205
- } else {
4206
- // unmatched surrogate; only append this code unit, in case the next
4207
- // code unit is the high surrogate of a surrogate pair
4208
- output.push(value);
4209
- counter--;
4210
- }
4211
- } else {
4212
- output.push(value);
4213
- }
4214
- }
4215
- return output;
4216
- }
4217
-
4218
- // Taken from http://mths.be/punycode
4219
- function ucs2encode(array) {
4220
- var length = array.length;
4221
- var index = -1;
4222
- var value;
4223
- var output = '';
4224
- while (++index < length) {
4225
- value = array[index];
4226
- if (value > 0xFFFF) {
4227
- value -= 0x10000;
4228
- output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
4229
- value = 0xDC00 | value & 0x3FF;
4230
- }
4231
- output += stringFromCharCode(value);
4232
- }
4233
- return output;
4234
- }
4235
-
4236
- /*--------------------------------------------------------------------------*/
4237
-
4238
- function createByte(codePoint, shift) {
4239
- return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);
4240
- }
4241
-
4242
- function encodeCodePoint(codePoint) {
4243
- if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence
4244
- return stringFromCharCode(codePoint);
4245
- }
4246
- var symbol = '';
4247
- if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence
4248
- symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);
4249
- }
4250
- else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence
4251
- symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);
4252
- symbol += createByte(codePoint, 6);
4253
- }
4254
- else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence
4255
- symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);
4256
- symbol += createByte(codePoint, 12);
4257
- symbol += createByte(codePoint, 6);
4258
- }
4259
- symbol += stringFromCharCode((codePoint & 0x3F) | 0x80);
4260
- return symbol;
4261
- }
4262
-
4263
- function utf8encode(string) {
4264
- var codePoints = ucs2decode(string);
4265
-
4266
- // console.log(JSON.stringify(codePoints.map(function(x) {
4267
- // return 'U+' + x.toString(16).toUpperCase();
4268
- // })));
4269
-
4270
- var length = codePoints.length;
4271
- var index = -1;
4272
- var codePoint;
4273
- var byteString = '';
4274
- while (++index < length) {
4275
- codePoint = codePoints[index];
4276
- byteString += encodeCodePoint(codePoint);
4277
- }
4278
- return byteString;
4279
- }
4280
-
4281
- /*--------------------------------------------------------------------------*/
4282
-
4283
- function readContinuationByte() {
4284
- if (byteIndex >= byteCount) {
4285
- throw Error('Invalid byte index');
4286
- }
4287
-
4288
- var continuationByte = byteArray[byteIndex] & 0xFF;
4289
- byteIndex++;
4290
-
4291
- if ((continuationByte & 0xC0) == 0x80) {
4292
- return continuationByte & 0x3F;
4293
- }
4294
-
4295
- // If we end up here, it’s not a continuation byte
4296
- throw Error('Invalid continuation byte');
4297
- }
4298
-
4299
- function decodeSymbol() {
4300
- var byte1;
4301
- var byte2;
4302
- var byte3;
4303
- var byte4;
4304
- var codePoint;
4305
-
4306
- if (byteIndex > byteCount) {
4307
- throw Error('Invalid byte index');
4308
- }
4309
-
4310
- if (byteIndex == byteCount) {
4311
- return false;
4312
- }
4313
-
4314
- // Read first byte
4315
- byte1 = byteArray[byteIndex] & 0xFF;
4316
- byteIndex++;
4317
-
4318
- // 1-byte sequence (no continuation bytes)
4319
- if ((byte1 & 0x80) == 0) {
4320
- return byte1;
4321
- }
4322
-
4323
- // 2-byte sequence
4324
- if ((byte1 & 0xE0) == 0xC0) {
4325
- var byte2 = readContinuationByte();
4326
- codePoint = ((byte1 & 0x1F) << 6) | byte2;
4327
- if (codePoint >= 0x80) {
4328
- return codePoint;
4329
- } else {
4330
- throw Error('Invalid continuation byte');
4331
- }
4332
- }
4333
-
4334
- // 3-byte sequence (may include unpaired surrogates)
4335
- if ((byte1 & 0xF0) == 0xE0) {
4336
- byte2 = readContinuationByte();
4337
- byte3 = readContinuationByte();
4338
- codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;
4339
- if (codePoint >= 0x0800) {
4340
- return codePoint;
4341
- } else {
4342
- throw Error('Invalid continuation byte');
4343
- }
4344
- }
4345
-
4346
- // 4-byte sequence
4347
- if ((byte1 & 0xF8) == 0xF0) {
4348
- byte2 = readContinuationByte();
4349
- byte3 = readContinuationByte();
4350
- byte4 = readContinuationByte();
4351
- codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |
4352
- (byte3 << 0x06) | byte4;
4353
- if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {
4354
- return codePoint;
4355
- }
4356
- }
4357
-
4358
- throw Error('Invalid UTF-8 detected');
4359
- }
4360
-
4361
- var byteArray;
4362
- var byteCount;
4363
- var byteIndex;
4364
- function utf8decode(byteString) {
4365
- byteArray = ucs2decode(byteString);
4366
- byteCount = byteArray.length;
4367
- byteIndex = 0;
4368
- var codePoints = [];
4369
- var tmp;
4370
- while ((tmp = decodeSymbol()) !== false) {
4371
- codePoints.push(tmp);
4372
- }
4373
- return ucs2encode(codePoints);
4374
- }
4375
-
4376
- /*--------------------------------------------------------------------------*/
4377
-
4378
- var utf8 = {
4379
- 'version': '2.0.0',
4380
- 'encode': utf8encode,
4381
- 'decode': utf8decode
4382
- };
4383
-
4384
- // Some AMD build optimizers, like r.js, check for specific condition patterns
4385
- // like the following:
4386
- if (
4387
- typeof define == 'function' &&
4388
- typeof define.amd == 'object' &&
4389
- define.amd
4390
- ) {
4391
- define(function() {
4392
- return utf8;
4393
- });
4394
- } else if (freeExports && !freeExports.nodeType) {
4395
- if (freeModule) { // in Node.js or RingoJS v0.8.0+
4396
- freeModule.exports = utf8;
4397
- } else { // in Narwhal or RingoJS v0.7.0-
4398
- var object = {};
4399
- var hasOwnProperty = object.hasOwnProperty;
4400
- for (var key in utf8) {
4401
- hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);
4402
- }
4403
- }
4404
- } else { // in Rhino or a web browser
4405
- root.utf8 = utf8;
4406
- }
4187
+ // Detect free variables `exports`
4188
+ var freeExports = typeof exports == 'object' && exports;
4189
+
4190
+ // Detect free variable `module`
4191
+ var freeModule = typeof module == 'object' && module &&
4192
+ module.exports == freeExports && module;
4193
+
4194
+ // Detect free variable `global`, from Node.js or Browserified code,
4195
+ // and use it as `root`
4196
+ var freeGlobal = typeof global == 'object' && global;
4197
+ if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
4198
+ root = freeGlobal;
4199
+ }
4200
+
4201
+ /*--------------------------------------------------------------------------*/
4202
+
4203
+ var stringFromCharCode = String.fromCharCode;
4204
+
4205
+ // Taken from http://mths.be/punycode
4206
+ function ucs2decode(string) {
4207
+ var output = [];
4208
+ var counter = 0;
4209
+ var length = string.length;
4210
+ var value;
4211
+ var extra;
4212
+ while (counter < length) {
4213
+ value = string.charCodeAt(counter++);
4214
+ if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
4215
+ // high surrogate, and there is a next character
4216
+ extra = string.charCodeAt(counter++);
4217
+ if ((extra & 0xFC00) == 0xDC00) { // low surrogate
4218
+ output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
4219
+ } else {
4220
+ // unmatched surrogate; only append this code unit, in case the next
4221
+ // code unit is the high surrogate of a surrogate pair
4222
+ output.push(value);
4223
+ counter--;
4224
+ }
4225
+ } else {
4226
+ output.push(value);
4227
+ }
4228
+ }
4229
+ return output;
4230
+ }
4231
+
4232
+ // Taken from http://mths.be/punycode
4233
+ function ucs2encode(array) {
4234
+ var length = array.length;
4235
+ var index = -1;
4236
+ var value;
4237
+ var output = '';
4238
+ while (++index < length) {
4239
+ value = array[index];
4240
+ if (value > 0xFFFF) {
4241
+ value -= 0x10000;
4242
+ output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
4243
+ value = 0xDC00 | value & 0x3FF;
4244
+ }
4245
+ output += stringFromCharCode(value);
4246
+ }
4247
+ return output;
4248
+ }
4249
+
4250
+ /*--------------------------------------------------------------------------*/
4251
+
4252
+ function createByte(codePoint, shift) {
4253
+ return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);
4254
+ }
4255
+
4256
+ function encodeCodePoint(codePoint) {
4257
+ if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence
4258
+ return stringFromCharCode(codePoint);
4259
+ }
4260
+ var symbol = '';
4261
+ if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence
4262
+ symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);
4263
+ }
4264
+ else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence
4265
+ symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);
4266
+ symbol += createByte(codePoint, 6);
4267
+ }
4268
+ else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence
4269
+ symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);
4270
+ symbol += createByte(codePoint, 12);
4271
+ symbol += createByte(codePoint, 6);
4272
+ }
4273
+ symbol += stringFromCharCode((codePoint & 0x3F) | 0x80);
4274
+ return symbol;
4275
+ }
4276
+
4277
+ function utf8encode(string) {
4278
+ var codePoints = ucs2decode(string);
4279
+
4280
+ // console.log(JSON.stringify(codePoints.map(function(x) {
4281
+ // return 'U+' + x.toString(16).toUpperCase();
4282
+ // })));
4283
+
4284
+ var length = codePoints.length;
4285
+ var index = -1;
4286
+ var codePoint;
4287
+ var byteString = '';
4288
+ while (++index < length) {
4289
+ codePoint = codePoints[index];
4290
+ byteString += encodeCodePoint(codePoint);
4291
+ }
4292
+ return byteString;
4293
+ }
4294
+
4295
+ /*--------------------------------------------------------------------------*/
4296
+
4297
+ function readContinuationByte() {
4298
+ if (byteIndex >= byteCount) {
4299
+ throw Error('Invalid byte index');
4300
+ }
4301
+
4302
+ var continuationByte = byteArray[byteIndex] & 0xFF;
4303
+ byteIndex++;
4304
+
4305
+ if ((continuationByte & 0xC0) == 0x80) {
4306
+ return continuationByte & 0x3F;
4307
+ }
4308
+
4309
+ // If we end up here, it’s not a continuation byte
4310
+ throw Error('Invalid continuation byte');
4311
+ }
4312
+
4313
+ function decodeSymbol() {
4314
+ var byte1;
4315
+ var byte2;
4316
+ var byte3;
4317
+ var byte4;
4318
+ var codePoint;
4319
+
4320
+ if (byteIndex > byteCount) {
4321
+ throw Error('Invalid byte index');
4322
+ }
4323
+
4324
+ if (byteIndex == byteCount) {
4325
+ return false;
4326
+ }
4327
+
4328
+ // Read first byte
4329
+ byte1 = byteArray[byteIndex] & 0xFF;
4330
+ byteIndex++;
4331
+
4332
+ // 1-byte sequence (no continuation bytes)
4333
+ if ((byte1 & 0x80) == 0) {
4334
+ return byte1;
4335
+ }
4336
+
4337
+ // 2-byte sequence
4338
+ if ((byte1 & 0xE0) == 0xC0) {
4339
+ var byte2 = readContinuationByte();
4340
+ codePoint = ((byte1 & 0x1F) << 6) | byte2;
4341
+ if (codePoint >= 0x80) {
4342
+ return codePoint;
4343
+ } else {
4344
+ throw Error('Invalid continuation byte');
4345
+ }
4346
+ }
4347
+
4348
+ // 3-byte sequence (may include unpaired surrogates)
4349
+ if ((byte1 & 0xF0) == 0xE0) {
4350
+ byte2 = readContinuationByte();
4351
+ byte3 = readContinuationByte();
4352
+ codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;
4353
+ if (codePoint >= 0x0800) {
4354
+ return codePoint;
4355
+ } else {
4356
+ throw Error('Invalid continuation byte');
4357
+ }
4358
+ }
4359
+
4360
+ // 4-byte sequence
4361
+ if ((byte1 & 0xF8) == 0xF0) {
4362
+ byte2 = readContinuationByte();
4363
+ byte3 = readContinuationByte();
4364
+ byte4 = readContinuationByte();
4365
+ codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |
4366
+ (byte3 << 0x06) | byte4;
4367
+ if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {
4368
+ return codePoint;
4369
+ }
4370
+ }
4371
+
4372
+ throw Error('Invalid UTF-8 detected');
4373
+ }
4374
+
4375
+ var byteArray;
4376
+ var byteCount;
4377
+ var byteIndex;
4378
+ function utf8decode(byteString) {
4379
+ byteArray = ucs2decode(byteString);
4380
+ byteCount = byteArray.length;
4381
+ byteIndex = 0;
4382
+ var codePoints = [];
4383
+ var tmp;
4384
+ while ((tmp = decodeSymbol()) !== false) {
4385
+ codePoints.push(tmp);
4386
+ }
4387
+ return ucs2encode(codePoints);
4388
+ }
4389
+
4390
+ /*--------------------------------------------------------------------------*/
4391
+
4392
+ var utf8 = {
4393
+ 'version': '2.0.0',
4394
+ 'encode': utf8encode,
4395
+ 'decode': utf8decode
4396
+ };
4397
+
4398
+ // Some AMD build optimizers, like r.js, check for specific condition patterns
4399
+ // like the following:
4400
+ if (
4401
+ typeof define == 'function' &&
4402
+ typeof define.amd == 'object' &&
4403
+ define.amd
4404
+ ) {
4405
+ define(function() {
4406
+ return utf8;
4407
+ });
4408
+ } else if (freeExports && !freeExports.nodeType) {
4409
+ if (freeModule) { // in Node.js or RingoJS v0.8.0+
4410
+ freeModule.exports = utf8;
4411
+ } else { // in Narwhal or RingoJS v0.7.0-
4412
+ var object = {};
4413
+ var hasOwnProperty = object.hasOwnProperty;
4414
+ for (var key in utf8) {
4415
+ hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);
4416
+ }
4417
+ }
4418
+ } else { // in Rhino or a web browser
4419
+ root.utf8 = utf8;
4420
+ }
4407
4421
 
4408
4422
  }(this));
4409
4423
 
4410
- },{}],29:[function(require,module,exports){
4411
- var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};/**
4424
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
4425
+ },{}],28:[function(_dereq_,module,exports){
4426
+ (function (global){
4427
+ /**
4412
4428
  * JSON parse.
4413
4429
  *
4414
4430
  * @see Based on jQuery#parseJSON (MIT) and JSON2
@@ -4440,7 +4456,8 @@ module.exports = function parsejson(data) {
4440
4456
  return (new Function('return ' + data))();
4441
4457
  }
4442
4458
  };
4443
- },{}],30:[function(require,module,exports){
4459
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
4460
+ },{}],29:[function(_dereq_,module,exports){
4444
4461
  /**
4445
4462
  * Compiles a querystring
4446
4463
  * Returns string representation of the object
@@ -4479,7 +4496,48 @@ exports.decode = function(qs){
4479
4496
  return qry;
4480
4497
  };
4481
4498
 
4482
- },{}],31:[function(require,module,exports){
4499
+ },{}],30:[function(_dereq_,module,exports){
4500
+ /**
4501
+ * Parses an URI
4502
+ *
4503
+ * @author Steven Levithan <stevenlevithan.com> (MIT license)
4504
+ * @api private
4505
+ */
4506
+
4507
+ var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
4508
+
4509
+ var parts = [
4510
+ 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'
4511
+ ];
4512
+
4513
+ module.exports = function parseuri(str) {
4514
+ var src = str,
4515
+ b = str.indexOf('['),
4516
+ e = str.indexOf(']');
4517
+
4518
+ if (b != -1 && e != -1) {
4519
+ str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);
4520
+ }
4521
+
4522
+ var m = re.exec(str || ''),
4523
+ uri = {},
4524
+ i = 14;
4525
+
4526
+ while (i--) {
4527
+ uri[parts[i]] = m[i] || '';
4528
+ }
4529
+
4530
+ if (b != -1 && e != -1) {
4531
+ uri.source = src;
4532
+ uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');
4533
+ uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');
4534
+ uri.ipv6uri = true;
4535
+ }
4536
+
4537
+ return uri;
4538
+ };
4539
+
4540
+ },{}],31:[function(_dereq_,module,exports){
4483
4541
 
4484
4542
  /**
4485
4543
  * Module dependencies.
@@ -4524,12 +4582,14 @@ function ws(uri, protocols, opts) {
4524
4582
 
4525
4583
  if (WebSocket) ws.prototype = WebSocket.prototype;
4526
4584
 
4527
- },{}],32:[function(require,module,exports){
4528
- var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};/*
4585
+ },{}],32:[function(_dereq_,module,exports){
4586
+ (function (global){
4587
+
4588
+ /*
4529
4589
  * Module requirements.
4530
4590
  */
4531
4591
 
4532
- var isArray = require('isarray');
4592
+ var isArray = _dereq_('isarray');
4533
4593
 
4534
4594
  /**
4535
4595
  * Module exports.
@@ -4548,10 +4608,10 @@ module.exports = hasBinary;
4548
4608
 
4549
4609
  function hasBinary(data) {
4550
4610
 
4551
- function recursiveCheckForBinary(obj) {
4611
+ function _hasBinary(obj) {
4552
4612
  if (!obj) return false;
4553
4613
 
4554
- if ( (global.Buffer && Buffer.isBuffer(obj)) ||
4614
+ if ( (global.Buffer && global.Buffer.isBuffer(obj)) ||
4555
4615
  (global.ArrayBuffer && obj instanceof ArrayBuffer) ||
4556
4616
  (global.Blob && obj instanceof Blob) ||
4557
4617
  (global.File && obj instanceof File)
@@ -4561,7 +4621,7 @@ function hasBinary(data) {
4561
4621
 
4562
4622
  if (isArray(obj)) {
4563
4623
  for (var i = 0; i < obj.length; i++) {
4564
- if (recursiveCheckForBinary(obj[i])) {
4624
+ if (_hasBinary(obj[i])) {
4565
4625
  return true;
4566
4626
  }
4567
4627
  }
@@ -4571,7 +4631,7 @@ function hasBinary(data) {
4571
4631
  }
4572
4632
 
4573
4633
  for (var key in obj) {
4574
- if (recursiveCheckForBinary(obj[key])) {
4634
+ if (obj.hasOwnProperty(key) && _hasBinary(obj[key])) {
4575
4635
  return true;
4576
4636
  }
4577
4637
  }
@@ -4580,21 +4640,22 @@ function hasBinary(data) {
4580
4640
  return false;
4581
4641
  }
4582
4642
 
4583
- return recursiveCheckForBinary(data);
4643
+ return _hasBinary(data);
4584
4644
  }
4585
4645
 
4586
- },{"isarray":33}],33:[function(require,module,exports){
4646
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
4647
+ },{"isarray":33}],33:[function(_dereq_,module,exports){
4587
4648
  module.exports = Array.isArray || function (arr) {
4588
4649
  return Object.prototype.toString.call(arr) == '[object Array]';
4589
4650
  };
4590
4651
 
4591
- },{}],34:[function(require,module,exports){
4652
+ },{}],34:[function(_dereq_,module,exports){
4592
4653
 
4593
4654
  /**
4594
4655
  * Module dependencies.
4595
4656
  */
4596
4657
 
4597
- var global = require('global');
4658
+ var global = _dereq_('global');
4598
4659
 
4599
4660
  /**
4600
4661
  * Module exports.
@@ -4613,7 +4674,7 @@ try {
4613
4674
  module.exports = false;
4614
4675
  }
4615
4676
 
4616
- },{"global":35}],35:[function(require,module,exports){
4677
+ },{"global":35}],35:[function(_dereq_,module,exports){
4617
4678
 
4618
4679
  /**
4619
4680
  * Returns `this`. Execute this without a "context" (i.e. without it being
@@ -4623,7 +4684,7 @@ try {
4623
4684
 
4624
4685
  module.exports = (function () { return this; })();
4625
4686
 
4626
- },{}],36:[function(require,module,exports){
4687
+ },{}],36:[function(_dereq_,module,exports){
4627
4688
 
4628
4689
  var indexOf = [].indexOf;
4629
4690
 
@@ -4634,7 +4695,7 @@ module.exports = function(arr, obj){
4634
4695
  }
4635
4696
  return -1;
4636
4697
  };
4637
- },{}],37:[function(require,module,exports){
4698
+ },{}],37:[function(_dereq_,module,exports){
4638
4699
 
4639
4700
  /**
4640
4701
  * HOP ref.
@@ -4719,7 +4780,7 @@ exports.length = function(obj){
4719
4780
  exports.isEmpty = function(obj){
4720
4781
  return 0 == exports.length(obj);
4721
4782
  };
4722
- },{}],38:[function(require,module,exports){
4783
+ },{}],38:[function(_dereq_,module,exports){
4723
4784
  /**
4724
4785
  * Parses an URI
4725
4786
  *
@@ -4746,12 +4807,16 @@ module.exports = function parseuri(str) {
4746
4807
  return uri;
4747
4808
  };
4748
4809
 
4749
- },{}],39:[function(require,module,exports){
4750
- var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};/**
4751
- * Modle requirements
4810
+ },{}],39:[function(_dereq_,module,exports){
4811
+ (function (global){
4812
+ /*global Blob,File*/
4813
+
4814
+ /**
4815
+ * Module requirements
4752
4816
  */
4753
4817
 
4754
- var isArray = require('isarray');
4818
+ var isArray = _dereq_('isarray');
4819
+ var isBuf = _dereq_('./is-buffer');
4755
4820
 
4756
4821
  /**
4757
4822
  * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.
@@ -4763,39 +4828,38 @@ var isArray = require('isarray');
4763
4828
  * @api public
4764
4829
  */
4765
4830
 
4766
- exports.deconstructPacket = function(packet) {
4767
- var buffers = [];
4768
- var packetData = packet.data;
4769
-
4770
- function deconstructBinPackRecursive(data) {
4771
- if (!data) return data;
4772
-
4773
- if ((global.Buffer && Buffer.isBuffer(data)) ||
4774
- (global.ArrayBuffer && data instanceof ArrayBuffer)) { // replace binary
4775
- var placeholder = {_placeholder: true, num: buffers.length};
4776
- buffers.push(data);
4777
- return placeholder;
4778
- } else if (isArray(data)) {
4779
- var newData = new Array(data.length);
4780
- for (var i = 0; i < data.length; i++) {
4781
- newData[i] = deconstructBinPackRecursive(data[i]);
4782
- }
4783
- return newData;
4784
- } else if ('object' == typeof data && !(data instanceof Date)) {
4785
- var newData = {};
4786
- for (var key in data) {
4787
- newData[key] = deconstructBinPackRecursive(data[key]);
4788
- }
4789
- return newData;
4790
- }
4791
- return data;
4831
+ exports.deconstructPacket = function(packet){
4832
+ var buffers = [];
4833
+ var packetData = packet.data;
4834
+
4835
+ function _deconstructPacket(data) {
4836
+ if (!data) return data;
4837
+
4838
+ if (isBuf(data)) {
4839
+ var placeholder = { _placeholder: true, num: buffers.length };
4840
+ buffers.push(data);
4841
+ return placeholder;
4842
+ } else if (isArray(data)) {
4843
+ var newData = new Array(data.length);
4844
+ for (var i = 0; i < data.length; i++) {
4845
+ newData[i] = _deconstructPacket(data[i]);
4846
+ }
4847
+ return newData;
4848
+ } else if ('object' == typeof data && !(data instanceof Date)) {
4849
+ var newData = {};
4850
+ for (var key in data) {
4851
+ newData[key] = _deconstructPacket(data[key]);
4852
+ }
4853
+ return newData;
4792
4854
  }
4855
+ return data;
4856
+ }
4793
4857
 
4794
- var pack = packet;
4795
- pack.data = deconstructBinPackRecursive(packetData);
4796
- pack.attachments = buffers.length; // number of binary 'attachments'
4797
- return {packet: pack, buffers: buffers};
4798
- }
4858
+ var pack = packet;
4859
+ pack.data = _deconstructPacket(packetData);
4860
+ pack.attachments = buffers.length; // number of binary 'attachments'
4861
+ return {packet: pack, buffers: buffers};
4862
+ };
4799
4863
 
4800
4864
  /**
4801
4865
  * Reconstructs a binary packet from its placeholder packet and buffers
@@ -4806,31 +4870,31 @@ exports.deconstructPacket = function(packet) {
4806
4870
  * @api public
4807
4871
  */
4808
4872
 
4809
- exports.reconstructPacket = function(packet, buffers) {
4810
- var curPlaceHolder = 0;
4873
+ exports.reconstructPacket = function(packet, buffers) {
4874
+ var curPlaceHolder = 0;
4811
4875
 
4812
- function reconstructBinPackRecursive(data) {
4813
- if (data && data._placeholder) {
4814
- var buf = buffers[data.num]; // appropriate buffer (should be natural order anyway)
4815
- return buf;
4816
- } else if (isArray(data)) {
4817
- for (var i = 0; i < data.length; i++) {
4818
- data[i] = reconstructBinPackRecursive(data[i]);
4819
- }
4820
- return data;
4821
- } else if (data && 'object' == typeof data) {
4822
- for (var key in data) {
4823
- data[key] = reconstructBinPackRecursive(data[key]);
4824
- }
4825
- return data;
4826
- }
4827
- return data;
4876
+ function _reconstructPacket(data) {
4877
+ if (data && data._placeholder) {
4878
+ var buf = buffers[data.num]; // appropriate buffer (should be natural order anyway)
4879
+ return buf;
4880
+ } else if (isArray(data)) {
4881
+ for (var i = 0; i < data.length; i++) {
4882
+ data[i] = _reconstructPacket(data[i]);
4883
+ }
4884
+ return data;
4885
+ } else if (data && 'object' == typeof data) {
4886
+ for (var key in data) {
4887
+ data[key] = _reconstructPacket(data[key]);
4888
+ }
4889
+ return data;
4828
4890
  }
4891
+ return data;
4892
+ }
4829
4893
 
4830
- packet.data = reconstructBinPackRecursive(packet.data);
4831
- packet.attachments = undefined; // no longer useful
4832
- return packet;
4833
- }
4894
+ packet.data = _reconstructPacket(packet.data);
4895
+ packet.attachments = undefined; // no longer useful
4896
+ return packet;
4897
+ };
4834
4898
 
4835
4899
  /**
4836
4900
  * Asynchronously removes Blobs or Files from data via
@@ -4843,8 +4907,7 @@ exports.deconstructPacket = function(packet) {
4843
4907
  */
4844
4908
 
4845
4909
  exports.removeBlobs = function(data, callback) {
4846
-
4847
- function removeBlobsRecursive(obj, curKey, containingObject) {
4910
+ function _removeBlobs(obj, curKey, containingObject) {
4848
4911
  if (!obj) return obj;
4849
4912
 
4850
4913
  // convert any blob
@@ -4869,48 +4932,38 @@ exports.removeBlobs = function(data, callback) {
4869
4932
  };
4870
4933
 
4871
4934
  fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer
4872
- }
4873
-
4874
- if (isArray(obj)) { // handle array
4935
+ } else if (isArray(obj)) { // handle array
4875
4936
  for (var i = 0; i < obj.length; i++) {
4876
- removeBlobsRecursive(obj[i], i, obj);
4937
+ _removeBlobs(obj[i], i, obj);
4877
4938
  }
4878
4939
  } else if (obj && 'object' == typeof obj && !isBuf(obj)) { // and object
4879
4940
  for (var key in obj) {
4880
- removeBlobsRecursive(obj[key], key, obj);
4941
+ _removeBlobs(obj[key], key, obj);
4881
4942
  }
4882
4943
  }
4883
4944
  }
4884
4945
 
4885
4946
  var pendingBlobs = 0;
4886
4947
  var bloblessData = data;
4887
- removeBlobsRecursive(bloblessData);
4948
+ _removeBlobs(bloblessData);
4888
4949
  if (!pendingBlobs) {
4889
4950
  callback(bloblessData);
4890
4951
  }
4891
- }
4952
+ };
4892
4953
 
4893
- /**
4894
- * Returns true if obj is a buffer or an arraybuffer.
4895
- *
4896
- * @api private
4897
- */
4898
- function isBuf(obj) {
4899
- return (global.Buffer && Buffer.isBuffer(obj)) ||
4900
- (global.ArrayBuffer && obj instanceof ArrayBuffer);
4901
- }
4954
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
4955
+ },{"./is-buffer":41,"isarray":42}],40:[function(_dereq_,module,exports){
4902
4956
 
4903
- },{"isarray":41}],40:[function(require,module,exports){
4904
- var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};
4905
4957
  /**
4906
4958
  * Module dependencies.
4907
4959
  */
4908
4960
 
4909
- var debug = require('debug')('socket.io-parser');
4910
- var json = require('json3');
4911
- var isArray = require('isarray');
4912
- var Emitter = require('emitter');
4913
- var binary = require('./binary');
4961
+ var debug = _dereq_('debug')('socket.io-parser');
4962
+ var json = _dereq_('json3');
4963
+ var isArray = _dereq_('isarray');
4964
+ var Emitter = _dereq_('component-emitter');
4965
+ var binary = _dereq_('./binary');
4966
+ var isBuf = _dereq_('./is-buffer');
4914
4967
 
4915
4968
  /**
4916
4969
  * Protocol version.
@@ -4918,7 +4971,7 @@ var binary = require('./binary');
4918
4971
  * @api public
4919
4972
  */
4920
4973
 
4921
- exports.protocol = 3;
4974
+ exports.protocol = 4;
4922
4975
 
4923
4976
  /**
4924
4977
  * Packet types.
@@ -4992,14 +5045,29 @@ exports.BINARY_EVENT = 5;
4992
5045
 
4993
5046
  exports.BINARY_ACK = 6;
4994
5047
 
4995
- exports.Encoder = Encoder
5048
+ /**
5049
+ * Encoder constructor.
5050
+ *
5051
+ * @api public
5052
+ */
5053
+
5054
+ exports.Encoder = Encoder;
5055
+
5056
+ /**
5057
+ * Decoder constructor.
5058
+ *
5059
+ * @api public
5060
+ */
5061
+
5062
+ exports.Decoder = Decoder;
4996
5063
 
4997
5064
  /**
4998
5065
  * A socket.io Encoder instance
4999
5066
  *
5000
5067
  * @api public
5001
5068
  */
5002
- function Encoder() {};
5069
+
5070
+ function Encoder() {}
5003
5071
 
5004
5072
  /**
5005
5073
  * Encode a packet as a single string if non-binary, or as a
@@ -5094,8 +5162,6 @@ function encodeAsBinary(obj, callback) {
5094
5162
  binary.removeBlobs(obj, writeEncoding);
5095
5163
  }
5096
5164
 
5097
- exports.Decoder = Decoder
5098
-
5099
5165
  /**
5100
5166
  * A socket.io Decoder instance
5101
5167
  *
@@ -5136,9 +5202,7 @@ Decoder.prototype.add = function(obj) {
5136
5202
  this.emit('decoded', packet);
5137
5203
  }
5138
5204
  }
5139
- else if ((global.Buffer && Buffer.isBuffer(obj)) ||
5140
- (global.ArrayBuffer && obj instanceof ArrayBuffer) ||
5141
- obj.base64) { // raw binary data
5205
+ else if (isBuf(obj) || obj.base64) { // raw binary data
5142
5206
  if (!this.reconstructor) {
5143
5207
  throw new Error('got binary data when not reconstructing a packet');
5144
5208
  } else {
@@ -5152,7 +5216,7 @@ Decoder.prototype.add = function(obj) {
5152
5216
  else {
5153
5217
  throw new Error('Unknown type: ' + obj);
5154
5218
  }
5155
- }
5219
+ };
5156
5220
 
5157
5221
  /**
5158
5222
  * Decode a packet String (JSON data)
@@ -5219,7 +5283,7 @@ function decodeString(str) {
5219
5283
 
5220
5284
  debug('decoded %s as %j', str, p);
5221
5285
  return p;
5222
- };
5286
+ }
5223
5287
 
5224
5288
  /**
5225
5289
  * Deallocates a parser's resources
@@ -5231,7 +5295,7 @@ Decoder.prototype.destroy = function() {
5231
5295
  if (this.reconstructor) {
5232
5296
  this.reconstructor.finishedReconstruction();
5233
5297
  }
5234
- }
5298
+ };
5235
5299
 
5236
5300
  /**
5237
5301
  * A manager of a binary event's 'buffer sequence'. Should
@@ -5266,7 +5330,7 @@ BinaryReconstructor.prototype.takeBinaryData = function(binData) {
5266
5330
  return packet;
5267
5331
  }
5268
5332
  return null;
5269
- }
5333
+ };
5270
5334
 
5271
5335
  /**
5272
5336
  * Cleans up binary packet reconstruction variables.
@@ -5277,7 +5341,7 @@ BinaryReconstructor.prototype.takeBinaryData = function(binData) {
5277
5341
  BinaryReconstructor.prototype.finishedReconstruction = function() {
5278
5342
  this.reconPack = null;
5279
5343
  this.buffers = [];
5280
- }
5344
+ };
5281
5345
 
5282
5346
  function error(data){
5283
5347
  return {
@@ -5286,9 +5350,26 @@ function error(data){
5286
5350
  };
5287
5351
  }
5288
5352
 
5289
- },{"./binary":39,"debug":9,"emitter":10,"isarray":41,"json3":42}],41:[function(require,module,exports){
5290
- module.exports=require(33)
5291
- },{}],42:[function(require,module,exports){
5353
+ },{"./binary":39,"./is-buffer":41,"component-emitter":8,"debug":9,"isarray":42,"json3":43}],41:[function(_dereq_,module,exports){
5354
+ (function (global){
5355
+
5356
+ module.exports = isBuf;
5357
+
5358
+ /**
5359
+ * Returns true if obj is a buffer or an arraybuffer.
5360
+ *
5361
+ * @api private
5362
+ */
5363
+
5364
+ function isBuf(obj) {
5365
+ return (global.Buffer && global.Buffer.isBuffer(obj)) ||
5366
+ (global.ArrayBuffer && obj instanceof ArrayBuffer);
5367
+ }
5368
+
5369
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
5370
+ },{}],42:[function(_dereq_,module,exports){
5371
+ module.exports=_dereq_(33)
5372
+ },{}],43:[function(_dereq_,module,exports){
5292
5373
  /*! JSON v3.2.6 | http://bestiejs.github.io/json3 | Copyright 2012-2013, Kit Cambridge | http://kit.mit-license.org */
5293
5374
  ;(function (window) {
5294
5375
  // Convenience aliases.
@@ -6151,7 +6232,7 @@ module.exports=require(33)
6151
6232
  }
6152
6233
  }(this));
6153
6234
 
6154
- },{}],43:[function(require,module,exports){
6235
+ },{}],44:[function(_dereq_,module,exports){
6155
6236
  module.exports = toArray
6156
6237
 
6157
6238
  function toArray(list, index) {
@@ -6169,4 +6250,3 @@ function toArray(list, index) {
6169
6250
  },{}]},{},[1])
6170
6251
  (1)
6171
6252
  });
6172
- ;