Merge pull request #543 from darkdarkdragon/develop-reconnect

resend request in case server was disconnected after request was sent
This commit is contained in:
wltsmrz
2015-09-13 02:14:22 -07:00
3 changed files with 37 additions and 9 deletions

View File

@@ -39,7 +39,10 @@ function Request(remote, command) {
util.inherits(Request, EventEmitter); util.inherits(Request, EventEmitter);
// Send the request to a remote. // Send the request to a remote.
Request.prototype.request = function(servers, callback) { Request.prototype.request = function(servers, callback_) {
const self = this;
const callback = typeof servers === 'function' ? servers : callback_;
this.emit('before'); this.emit('before');
this.callback(callback); this.callback(callback);
@@ -51,15 +54,32 @@ Request.prototype.request = function(servers, callback) {
this.on('error', function() {}); this.on('error', function() {});
this.emit('request', this.remote); this.emit('request', this.remote);
if (Array.isArray(servers)) { function doRequest() {
servers.forEach(function(server) { if (Array.isArray(servers)) {
this.setServer(server); servers.forEach(function(server) {
this.remote.request(this); self.setServer(server);
}, this); self.remote.request(self);
} else { }, self);
this.remote.request(this); } else {
self.remote.request(self);
}
} }
function onReconnect() {
doRequest();
}
function onResponse() {
self.remote.removeListener('connected', onReconnect);
}
if (this.remote.isConnected()) {
this.remote.on('connected', onReconnect);
}
this.once('response', onResponse);
doRequest();
return this; return this;
}; };
@@ -228,7 +248,9 @@ Request.prototype.callback = function(callback, successEvent, errorEvent) {
this.once(this.successEvent, requestSuccess); this.once(this.successEvent, requestSuccess);
this.once(this.errorEvent, requestError); this.once(this.errorEvent, requestError);
this.request(); if (!this.requested) {
this.request();
}
return this; return this;
}; };

View File

@@ -692,6 +692,7 @@ Server.prototype._handleResponse = function(message) {
remote: message remote: message
}); });
} }
request.emit('response', message);
}; };
Server.prototype._handlePathFind = function(message) { Server.prototype._handlePathFind = function(message) {

View File

@@ -47,6 +47,11 @@ describe('Request', function() {
assert.strictEqual(typeof req.message, 'object'); assert.strictEqual(typeof req.message, 'object');
assert.strictEqual(req.message.command, 'server_info'); assert.strictEqual(req.message.command, 'server_info');
done(); done();
},
on: function() {
},
isConnected: function() {
return true;
} }
}; };