mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-21 04:35:49 +00:00
move reconnect logic from Request.callback to Request.request
This commit is contained in:
@@ -40,6 +40,8 @@ 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;
|
||||||
|
|
||||||
this.emit('before');
|
this.emit('before');
|
||||||
this.callback(callback);
|
this.callback(callback);
|
||||||
|
|
||||||
@@ -51,15 +53,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;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -207,12 +226,7 @@ Request.prototype.callback = function(callback, successEvent, errorEvent) {
|
|||||||
|
|
||||||
let called = false;
|
let called = false;
|
||||||
|
|
||||||
function onReconnect() {
|
|
||||||
self.remote.request(self);
|
|
||||||
}
|
|
||||||
|
|
||||||
function requestSuccess(message) {
|
function requestSuccess(message) {
|
||||||
self.remote.removeListener('connected', onReconnect);
|
|
||||||
if (!called) {
|
if (!called) {
|
||||||
called = true;
|
called = true;
|
||||||
callback.call(self, null, message);
|
callback.call(self, null, message);
|
||||||
@@ -220,7 +234,6 @@ Request.prototype.callback = function(callback, successEvent, errorEvent) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function requestError(error) {
|
function requestError(error) {
|
||||||
self.remote.removeListener('connected', onReconnect);
|
|
||||||
if (!called) {
|
if (!called) {
|
||||||
called = true;
|
called = true;
|
||||||
|
|
||||||
@@ -234,9 +247,6 @@ 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);
|
||||||
if (this.remote.isConnected()) {
|
|
||||||
this.remote.once('connected', onReconnect);
|
|
||||||
}
|
|
||||||
this.request();
|
this.request();
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
@@ -672,6 +672,7 @@ Server.prototype._handleResponse = function(message) {
|
|||||||
const responseEvent = 'response_' + command;
|
const responseEvent = 'response_' + command;
|
||||||
|
|
||||||
request.emit('success', result);
|
request.emit('success', result);
|
||||||
|
request.emit('response', result);
|
||||||
|
|
||||||
[this, this._remote].forEach(function(emitter) {
|
[this, this._remote].forEach(function(emitter) {
|
||||||
emitter.emit(responseEvent, result, request, message);
|
emitter.emit(responseEvent, result, request, message);
|
||||||
@@ -686,6 +687,7 @@ Server.prototype._handleResponse = function(message) {
|
|||||||
error_message: 'Remote reported an error.',
|
error_message: 'Remote reported an error.',
|
||||||
remote: message
|
remote: message
|
||||||
});
|
});
|
||||||
|
request.emit('response');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user