move reconnect logic from Request.callback to Request.request

This commit is contained in:
Ivan Tivonenko
2015-09-09 21:00:03 +03:00
parent c57cef4a21
commit 77068667e4
3 changed files with 33 additions and 16 deletions

View File

@@ -40,6 +40,8 @@ util.inherits(Request, EventEmitter);
// Send the request to a remote.
Request.prototype.request = function(servers, callback) {
const self = this;
this.emit('before');
this.callback(callback);
@@ -51,14 +53,31 @@ Request.prototype.request = function(servers, callback) {
this.on('error', function() {});
this.emit('request', this.remote);
function doRequest() {
if (Array.isArray(servers)) {
servers.forEach(function(server) {
this.setServer(server);
this.remote.request(this);
}, this);
self.setServer(server);
self.remote.request(self);
}, self);
} else {
this.remote.request(this);
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;
};
@@ -207,12 +226,7 @@ Request.prototype.callback = function(callback, successEvent, errorEvent) {
let called = false;
function onReconnect() {
self.remote.request(self);
}
function requestSuccess(message) {
self.remote.removeListener('connected', onReconnect);
if (!called) {
called = true;
callback.call(self, null, message);
@@ -220,7 +234,6 @@ Request.prototype.callback = function(callback, successEvent, errorEvent) {
}
function requestError(error) {
self.remote.removeListener('connected', onReconnect);
if (!called) {
called = true;
@@ -234,9 +247,6 @@ Request.prototype.callback = function(callback, successEvent, errorEvent) {
this.once(this.successEvent, requestSuccess);
this.once(this.errorEvent, requestError);
if (this.remote.isConnected()) {
this.remote.once('connected', onReconnect);
}
this.request();
return this;

View File

@@ -672,6 +672,7 @@ Server.prototype._handleResponse = function(message) {
const responseEvent = 'response_' + command;
request.emit('success', result);
request.emit('response', result);
[this, this._remote].forEach(function(emitter) {
emitter.emit(responseEvent, result, request, message);
@@ -686,6 +687,7 @@ Server.prototype._handleResponse = function(message) {
error_message: 'Remote reported an error.',
remote: message
});
request.emit('response');
}
};

View File

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