First commit
This commit is contained in:
103
hGameTest/node_modules/sockjs-client/lib/transport/sender/xdr.js
generated
vendored
Normal file
103
hGameTest/node_modules/sockjs-client/lib/transport/sender/xdr.js
generated
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
'use strict';
|
||||
|
||||
var EventEmitter = require('events').EventEmitter
|
||||
, inherits = require('inherits')
|
||||
, eventUtils = require('../../utils/event')
|
||||
, browser = require('../../utils/browser')
|
||||
, urlUtils = require('../../utils/url')
|
||||
;
|
||||
|
||||
var debug = function() {};
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
debug = require('debug')('sockjs-client:sender:xdr');
|
||||
}
|
||||
|
||||
// References:
|
||||
// http://ajaxian.com/archives/100-line-ajax-wrapper
|
||||
// http://msdn.microsoft.com/en-us/library/cc288060(v=VS.85).aspx
|
||||
|
||||
function XDRObject(method, url, payload) {
|
||||
debug(method, url);
|
||||
var self = this;
|
||||
EventEmitter.call(this);
|
||||
|
||||
setTimeout(function() {
|
||||
self._start(method, url, payload);
|
||||
}, 0);
|
||||
}
|
||||
|
||||
inherits(XDRObject, EventEmitter);
|
||||
|
||||
XDRObject.prototype._start = function(method, url, payload) {
|
||||
debug('_start');
|
||||
var self = this;
|
||||
var xdr = new global.XDomainRequest();
|
||||
// IE caches even POSTs
|
||||
url = urlUtils.addQuery(url, 't=' + (+new Date()));
|
||||
|
||||
xdr.onerror = function() {
|
||||
debug('onerror');
|
||||
self._error();
|
||||
};
|
||||
xdr.ontimeout = function() {
|
||||
debug('ontimeout');
|
||||
self._error();
|
||||
};
|
||||
xdr.onprogress = function() {
|
||||
debug('progress', xdr.responseText);
|
||||
self.emit('chunk', 200, xdr.responseText);
|
||||
};
|
||||
xdr.onload = function() {
|
||||
debug('load');
|
||||
self.emit('finish', 200, xdr.responseText);
|
||||
self._cleanup(false);
|
||||
};
|
||||
this.xdr = xdr;
|
||||
this.unloadRef = eventUtils.unloadAdd(function() {
|
||||
self._cleanup(true);
|
||||
});
|
||||
try {
|
||||
// Fails with AccessDenied if port number is bogus
|
||||
this.xdr.open(method, url);
|
||||
if (this.timeout) {
|
||||
this.xdr.timeout = this.timeout;
|
||||
}
|
||||
this.xdr.send(payload);
|
||||
} catch (x) {
|
||||
this._error();
|
||||
}
|
||||
};
|
||||
|
||||
XDRObject.prototype._error = function() {
|
||||
this.emit('finish', 0, '');
|
||||
this._cleanup(false);
|
||||
};
|
||||
|
||||
XDRObject.prototype._cleanup = function(abort) {
|
||||
debug('cleanup', abort);
|
||||
if (!this.xdr) {
|
||||
return;
|
||||
}
|
||||
this.removeAllListeners();
|
||||
eventUtils.unloadDel(this.unloadRef);
|
||||
|
||||
this.xdr.ontimeout = this.xdr.onerror = this.xdr.onprogress = this.xdr.onload = null;
|
||||
if (abort) {
|
||||
try {
|
||||
this.xdr.abort();
|
||||
} catch (x) {
|
||||
// intentionally empty
|
||||
}
|
||||
}
|
||||
this.unloadRef = this.xdr = null;
|
||||
};
|
||||
|
||||
XDRObject.prototype.close = function() {
|
||||
debug('close');
|
||||
this._cleanup(true);
|
||||
};
|
||||
|
||||
// IE 8/9 if the request target uses the same scheme - #79
|
||||
XDRObject.enabled = !!(global.XDomainRequest && browser.hasDomain());
|
||||
|
||||
module.exports = XDRObject;
|
||||
Reference in New Issue
Block a user