Add usimp.chooseDomainServer
This commit is contained in:
@ -7,3 +7,31 @@ usimp.lookup = function (domain_name) {
|
||||
redirect: "manual",
|
||||
});
|
||||
}
|
||||
|
||||
usimp.chooseDomainServer = function (domainServers, invalidDomainServers = []) {
|
||||
if (domainServers.length === 0) throw Error("No domain servers specified");
|
||||
|
||||
domainServers.filter(srv => invalidDomainServers.map(srv => srv.host).includes(srv));
|
||||
if (domainServers.length === 0) throw Error("No domain servers reachable");
|
||||
if (domainServers.length === 1) return domainServers[0];
|
||||
|
||||
let priority = domainServers.reduce((min, srv) => Math.min(min, srv.priority), Infinity);
|
||||
domainServers = domainServers.filter(srv => srv.priority === priority);
|
||||
if (domainServers.length === 1) return domainServers[0];
|
||||
|
||||
let totalWeight = domainServers.reduce((total, srv) => total + srv.weight, 0);
|
||||
let w = Math.floor(Math.random() * totalWeight);
|
||||
|
||||
let accumulator = 0;
|
||||
for (let srv of domainServers) {
|
||||
accumulator += srv.weight;
|
||||
if (w < accumulator) return srv;
|
||||
}
|
||||
|
||||
console.warn("Domain server selection not worked correctly");
|
||||
return domainServers[0];
|
||||
}
|
||||
|
||||
usimp.login = function (domainServer, accountName, password) {
|
||||
return fetch(``)
|
||||
}
|
||||
|
Reference in New Issue
Block a user