From 34e5176430c557d3b994b96eb29c8937d7c168ee Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sat, 9 Oct 2021 13:35:00 -0700 Subject: [PATCH] finish minigame balancer --- .../queue/common/queues/QueueServerImpl.java | 1 + .../queues/balancers/MinigameBalancer.java | 43 ++++++++----------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java b/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java index 80d9bc8..5397493 100644 --- a/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java @@ -419,6 +419,7 @@ public class QueueServerImpl implements QueueServer { @Override public AdaptedServer getIdealServer(AdaptedPlayer player) { + Debugger.debug(getBalancer().toString()); return getBalancer().getIdealServer(player); } diff --git a/common/src/main/java/us/ajg0702/queue/common/queues/balancers/MinigameBalancer.java b/common/src/main/java/us/ajg0702/queue/common/queues/balancers/MinigameBalancer.java index 7de6107..c74123d 100644 --- a/common/src/main/java/us/ajg0702/queue/common/queues/balancers/MinigameBalancer.java +++ b/common/src/main/java/us/ajg0702/queue/common/queues/balancers/MinigameBalancer.java @@ -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 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> servers = new ArrayList<>(serverInfos.entrySet()); + servers.sort(Comparator.comparingInt(o -> { + @SuppressWarnings("unchecked") + Map.Entry e = (Map.Entry) o; + return e.getValue().getPlayerCount(); + }).reversed()); + LinkedHashMap sortedServers = new LinkedHashMap<>(); + for(Map.Entry 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(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; } }