You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.3 KiB
49 lines
1.3 KiB
'use strict';
|
|
|
|
var inherits = require('inherits')
|
|
, urlUtils = require('../../utils/url')
|
|
, SenderReceiver = require('./sender-receiver')
|
|
;
|
|
|
|
var debug = function() {};
|
|
if (process.env.NODE_ENV !== 'production') {
|
|
debug = require('debug')('sockjs-client:ajax-based');
|
|
}
|
|
|
|
function createAjaxSender(AjaxObject) {
|
|
return function(url, payload, callback) {
|
|
debug('create ajax sender', url, payload);
|
|
var opt = {};
|
|
if (typeof payload === 'string') {
|
|
opt.headers = {'Content-type': 'text/plain'};
|
|
}
|
|
var ajaxUrl = urlUtils.addPath(url, '/xhr_send');
|
|
var xo = new AjaxObject('POST', ajaxUrl, payload, opt);
|
|
xo.once('finish', function(status) {
|
|
debug('finish', status);
|
|
xo = null;
|
|
|
|
if (status !== 200 && status !== 204) {
|
|
return callback(new Error('http status ' + status));
|
|
}
|
|
callback();
|
|
});
|
|
return function() {
|
|
debug('abort');
|
|
xo.close();
|
|
xo = null;
|
|
|
|
var err = new Error('Aborted');
|
|
err.code = 1000;
|
|
callback(err);
|
|
};
|
|
};
|
|
}
|
|
|
|
function AjaxBasedTransport(transUrl, urlSuffix, Receiver, AjaxObject) {
|
|
SenderReceiver.call(this, transUrl, urlSuffix, createAjaxSender(AjaxObject), Receiver, AjaxObject);
|
|
}
|
|
|
|
inherits(AjaxBasedTransport, SenderReceiver);
|
|
|
|
module.exports = AjaxBasedTransport;
|