safelink
Version:
SafeLink is an open-source NodeJS library created to maintain long-term communication between distant remote sites with varying network quality
55 lines (44 loc) • 2.11 kB
JavaScript
var request = require('request'),
_ = require('lodash'),
Q = require('q');
module.exports = (function() {
function Transport(layer, log) {
this.log = log.child({transport:'polling'});
this.layer = layer;
}
Transport.prototype.isAvailable = function() {
return true;
};
Transport.prototype.send = function(sender, uuid, key, payload, options) {
var defer = Q.defer(), _this = this;
this.log.debug("Sending message %s(%s) with timeout %d", key, uuid, (options.timeout || sender.timeout) * 1000 );
request({
url: sender.url,
method:'POST',
body: _.extend(payload || {}, {uuid: uuid, key:key, v: sender.version, id: sender.id}),
json:true,
pool:false,
timeout:(options.timeout || sender.timeout) * 1000
}, function(err, resp, body) {
if(err) {
_this.log.error("Error received from server for request, but no callback was provided. %s", err, JSON.stringify({url:sender.url, method:'POST', body:_.extend(payload || {}, {key:key, v: sender.version, id: sender.id}) }));
defer.reject({error:err});
}
else if(resp) {
if(resp.statusCode >= 400) {
_this.log.error("Error received from server for request, but no callback was provided. %s", err, JSON.stringify({url:sender.url, method:'POST', body:_.extend(payload || {}, {key:key, v: sender.version, id: sender.id}) }));
defer.reject({status:resp.statusCode, error:err});
}
else {
defer.resolve(body);
}
}
else {
_this.log.error("Error received from server for request, but no callback was provided. %s", err, JSON.stringify({url:sender.url, method:'POST', body:_.extend(payload || {}, {key:key, v: sender.version, id: sender.id}) }));
defer.reject({error:err});
}
});
return defer.promise;
};
return Transport;
})();