Refactor lighthouse.js and add support for custom servers
- Adds support for custom servers - Some light refactoring; mainly moving the logic for retrying queries into lbry.call() instead of leaving it up to the individual methods
This commit is contained in:
parent
9e2b43c531
commit
5bcf095600
1 changed files with 38 additions and 19 deletions
|
@ -1,8 +1,8 @@
|
||||||
import lbry from './lbry.js';
|
import lbry from './lbry.js';
|
||||||
|
|
||||||
var lighthouse = {
|
var lighthouse = {
|
||||||
_search_timeout: 5000,
|
_query_timeout: 5000,
|
||||||
_max_search_tries: 5,
|
_max_query_tries: 5,
|
||||||
|
|
||||||
servers: [
|
servers: [
|
||||||
'http://lighthouse4.lbry.io:50005',
|
'http://lighthouse4.lbry.io:50005',
|
||||||
|
@ -12,37 +12,56 @@ var lighthouse = {
|
||||||
path: '/',
|
path: '/',
|
||||||
|
|
||||||
call: function(method, params, callback, errorCallback, connectFailedCallback, timeout) {
|
call: function(method, params, callback, errorCallback, connectFailedCallback, timeout) {
|
||||||
lbry.jsonrpc_call(this.server + this.path, method, params, callback, errorCallback, connectFailedCallback, timeout);
|
const handleConnectFailed = function(tryNum=0) {
|
||||||
},
|
if (tryNum > lighthouse._max_query_tries) {
|
||||||
|
|
||||||
search: function(query, callback, errorCallback, connectFailedCallback, timeout) {
|
|
||||||
let handleSearchFailed = function(tryNum=0) {
|
|
||||||
if (tryNum > lighthouse._max_search_tries) {
|
|
||||||
if (connectFailedCallback) {
|
if (connectFailedCallback) {
|
||||||
connectFailedCallback();
|
connectFailedCallback();
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`Could not connect to Lighthouse server. Last server attempted: ${lighthouse.server}`);
|
throw new Error(`Could not connect to Lighthouse server. Last server attempted: ${lighthouse.server}`);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Randomly choose one of the other search servers to switch to
|
lbry.call(method, params, callback, errorCallback, () => { handleConnectFailed(tryNum + 1) }, timeout);
|
||||||
let otherServers = lighthouse.servers.slice();
|
|
||||||
otherServers.splice(otherServers.indexOf(lighthouse.server), 1);
|
|
||||||
lighthouse.server = otherServers[Math.round(Math.random() * (otherServers.length - 1))];
|
|
||||||
|
|
||||||
lighthouse.call('search', [query], callback, errorCallback, function() {
|
|
||||||
handleSearchFailed(tryNum + 1);
|
|
||||||
}, lighthouse._search_timeout);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lighthouse.call('search', [query], callback, errorCallback, function() { handleSearchFailed() }, lighthouse._search_timeout);
|
// Set the Lighthouse server if it hasn't been set yet, or if the current server is not in
|
||||||
|
// the current set of servers (most likely because of a settings change).
|
||||||
|
if (typeof lighthouse.server === 'undefined' || lighthouse.getServers().indexOf(lighthouse.server) == -1) {
|
||||||
|
lighthouse.chooseNewServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
lbry.jsonrpc_call(this.server + this.path, method, params, callback, errorCallback,
|
||||||
|
() => { handleConnectFailed() }, timeout || lighthouse.query_timeout);
|
||||||
|
},
|
||||||
|
|
||||||
|
getServers: function() {
|
||||||
|
return lbry.getClientSetting('useCustomLighthouseServers')
|
||||||
|
? lbry.getClientSetting('customLighthouseServers')
|
||||||
|
: lighthouse.servers;
|
||||||
|
},
|
||||||
|
|
||||||
|
chooseNewServer: function() {
|
||||||
|
// Randomly choose a new Lighthouse server and switch to it. If a server is already set, this
|
||||||
|
// will choose a different one (used for switching servers after a failed query).
|
||||||
|
const servers = lighthouse.getServers();
|
||||||
|
let newServerChoices;
|
||||||
|
if (!lighthouse.server) {
|
||||||
|
newServerChoices = servers;
|
||||||
|
} else {
|
||||||
|
newServerChoices = lighthouse.getServers().slice();
|
||||||
|
newServerChoices.splice(newServerChoices.indexOf(lighthouse.server), 1);
|
||||||
|
}
|
||||||
|
lighthouse.server = newServerChoices[Math.round(Math.random() * (newServerChoices.length - 1))];
|
||||||
|
},
|
||||||
|
|
||||||
|
search: function(query, callback, errorCallback, connectFailedCallback, timeout) {
|
||||||
|
lighthouse.call('search', [query], callback, errorCallback, connectFailedCallback, timeout);
|
||||||
},
|
},
|
||||||
|
|
||||||
getSizeForName: function(name, callback, errorCallback, connectFailedCallback, timeout) {
|
getSizeForName: function(name, callback, errorCallback, connectFailedCallback, timeout) {
|
||||||
return lighthouse.call('get_size_for_name', [name], callback, errorCallback, connectFailedCallback, timeout);
|
lighthouse.call('get_size_for_name', [name], callback, errorCallback, connectFailedCallback, timeout);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
lighthouse.server = lighthouse.servers[Math.round(Math.random() * (lighthouse.servers.length - 1))];
|
|
||||||
|
|
||||||
export default lighthouse;
|
export default lighthouse;
|
||||||
|
|
Loading…
Reference in a new issue