finish minigame balancer

This commit is contained in:
ajgeiss0702
2021-10-09 13:35:00 -07:00
parent 473959dda4
commit 34e5176430
2 changed files with 20 additions and 24 deletions
@@ -419,6 +419,7 @@ public class QueueServerImpl implements QueueServer {
@Override
public AdaptedServer getIdealServer(AdaptedPlayer player) {
Debugger.debug(getBalancer().toString());
return getBalancer().getIdealServer(player);
}
@@ -6,9 +6,8 @@ import us.ajg0702.queue.api.queues.QueueServer;
import us.ajg0702.queue.api.server.AdaptedServer;
import us.ajg0702.queue.api.server.AdaptedServerPing;
import us.ajg0702.queue.common.QueueMain;
import us.ajg0702.utils.common.GenUtils;
import java.util.HashMap;
import java.util.*;
public class MinigameBalancer implements Balancer {
@@ -22,35 +21,31 @@ public class MinigameBalancer implements Balancer {
@Override
public AdaptedServer getIdealServer(AdaptedPlayer player) {
HashMap<AdaptedServer, AdaptedServerPing> serverInfos = server.getLastPings();
AdaptedServer selected = null;
int selectednum = 0;
if(serverInfos.keySet().size() == 1) {
selected = serverInfos.keySet().iterator().next();
return serverInfos.keySet().iterator().next();
} else {
for(AdaptedServer si : serverInfos.keySet()) {
AdaptedServerPing sp = serverInfos.get(si);
List<Map.Entry<AdaptedServer, AdaptedServerPing>> servers = new ArrayList<>(serverInfos.entrySet());
servers.sort(Comparator.comparingInt(o -> {
@SuppressWarnings("unchecked")
Map.Entry<AdaptedServer, AdaptedServerPing> e = (Map.Entry<AdaptedServer, AdaptedServerPing>) o;
return e.getValue().getPlayerCount();
}).reversed());
LinkedHashMap<AdaptedServer, AdaptedServerPing> sortedServers = new LinkedHashMap<>();
for(Map.Entry<AdaptedServer, AdaptedServerPing> entry : servers) {
sortedServers.put(entry.getKey(), entry.getValue());
}
for(AdaptedServer si : sortedServers.keySet()) {
AdaptedServerPing sp = sortedServers.get(si);
if(sp == null) continue;
int online = sp.getPlayerCount();
int max = sp.getMaxPlayers();
if(selected == null) {
selected = si;
selectednum = online;
continue;
}
if(selectednum < online && online < max && main.getQueueManager().findServer(si.getName()).isJoinable(player)) {
selected = si;
selectednum = online;
if(online < max) {
return si;
}
}
return new ArrayList<AdaptedServer>(sortedServers.keySet().size()).get(sortedServers.keySet().size()-1);
}
if(selected == null && serverInfos.size() > 0) {
selected = serverInfos.keySet().iterator().next();
}
if(selected == null) {
main.getLogger().warning("Unable to find ideal server, using random server from group.");
int r = GenUtils.randomInt(0, server.getServers().size()-1);
selected = server.getServers().get(r);
}
return selected;
}
}