mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-20 12:15:51 +00:00
Merge pull request #543 from darkdarkdragon/develop-reconnect
resend request in case server was disconnected after request was sent
This commit is contained in:
@@ -39,7 +39,10 @@ function Request(remote, command) {
|
||||
util.inherits(Request, EventEmitter);
|
||||
|
||||
// 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.callback(callback);
|
||||
|
||||
@@ -51,14 +54,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;
|
||||
};
|
||||
@@ -228,7 +248,9 @@ Request.prototype.callback = function(callback, successEvent, errorEvent) {
|
||||
|
||||
this.once(this.successEvent, requestSuccess);
|
||||
this.once(this.errorEvent, requestError);
|
||||
if (!this.requested) {
|
||||
this.request();
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
@@ -692,6 +692,7 @@ Server.prototype._handleResponse = function(message) {
|
||||
remote: message
|
||||
});
|
||||
}
|
||||
request.emit('response', message);
|
||||
};
|
||||
|
||||
Server.prototype._handlePathFind = function(message) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user