| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | 'use strict';var EventEmitter = require('events').EventEmitter  , inherits = require('inherits')  , urlUtils = require('./utils/url')  , XDR = require('./transport/sender/xdr')  , XHRCors = require('./transport/sender/xhr-cors')  , XHRLocal = require('./transport/sender/xhr-local')  , XHRFake = require('./transport/sender/xhr-fake')  , InfoIframe = require('./info-iframe')  , InfoAjax = require('./info-ajax')  ;var debug = function() {};if (process.env.NODE_ENV !== 'production') {  debug = require('debug')('sockjs-client:info-receiver');}function InfoReceiver(baseUrl, urlInfo) {  debug(baseUrl);  var self = this;  EventEmitter.call(this);  setTimeout(function() {    self.doXhr(baseUrl, urlInfo);  }, 0);}inherits(InfoReceiver, EventEmitter);// TODO this is currently ignoring the list of available transports and the whitelistInfoReceiver._getReceiver = function(baseUrl, url, urlInfo) {  // determine method of CORS support (if needed)  if (urlInfo.sameOrigin) {    return new InfoAjax(url, XHRLocal);  }  if (XHRCors.enabled) {    return new InfoAjax(url, XHRCors);  }  if (XDR.enabled && urlInfo.sameScheme) {    return new InfoAjax(url, XDR);  }  if (InfoIframe.enabled()) {    return new InfoIframe(baseUrl, url);  }  return new InfoAjax(url, XHRFake);};InfoReceiver.prototype.doXhr = function(baseUrl, urlInfo) {  var self = this    , url = urlUtils.addPath(baseUrl, '/info')    ;  debug('doXhr', url);  this.xo = InfoReceiver._getReceiver(baseUrl, url, urlInfo);  this.timeoutRef = setTimeout(function() {    debug('timeout');    self._cleanup(false);    self.emit('finish');  }, InfoReceiver.timeout);  this.xo.once('finish', function(info, rtt) {    debug('finish', info, rtt);    self._cleanup(true);    self.emit('finish', info, rtt);  });};InfoReceiver.prototype._cleanup = function(wasClean) {  debug('_cleanup');  clearTimeout(this.timeoutRef);  this.timeoutRef = null;  if (!wasClean && this.xo) {    this.xo.close();  }  this.xo = null;};InfoReceiver.prototype.close = function() {  debug('close');  this.removeAllListeners();  this._cleanup(false);};InfoReceiver.timeout = 8000;module.exports = InfoReceiver;
 |