From 8d47f52265bef6f1f96322da55a803fccb8847f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Mart=C3=ADnez=20Rinc=C3=B3n?= Date: Thu, 28 Dec 2017 22:37:18 +0100 Subject: [PATCH] Restructured the providers, now using SecureRandom --- .../connection/ProviderType.java | 29 +++++++++++---- .../ProgressiveFillerProvider.java} | 4 +-- .../ProgressiveLowestProvider.java} | 4 +-- .../ProgressiveProvider.java | 5 ++- .../types/random/RandomFillerProvider.java | 35 +++++++++++++++++++ .../RandomLowestProvider.java} | 9 ++--- .../types/{ => random}/RandomProvider.java | 7 ++-- .../playerbalancer/utils/RandomUtils.java | 12 +++++++ Main Plugin/src/main/resources/default.conf | 24 ++++++------- 9 files changed, 96 insertions(+), 33 deletions(-) rename Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/{FillerProvider.java => progressive/ProgressiveFillerProvider.java} (87%) rename Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/{LowestProvider.java => progressive/ProgressiveLowestProvider.java} (84%) rename Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/{ => progressive}/ProgressiveProvider.java (81%) create mode 100644 Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/random/RandomFillerProvider.java rename Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/{BalancedProvider.java => random/RandomLowestProvider.java} (78%) rename Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/{ => random}/RandomProvider.java (73%) create mode 100644 Main Plugin/src/main/java/com/jaimemartz/playerbalancer/utils/RandomUtils.java diff --git a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/ProviderType.java b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/ProviderType.java index ceec29c..723ce11 100644 --- a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/ProviderType.java +++ b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/ProviderType.java @@ -2,7 +2,13 @@ package com.jaimemartz.playerbalancer.connection; import com.jaimemartz.playerbalancer.PlayerBalancer; import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider; -import com.jaimemartz.playerbalancer.connection.provider.types.*; +import com.jaimemartz.playerbalancer.connection.provider.types.NullProvider; +import com.jaimemartz.playerbalancer.connection.provider.types.progressive.ProgressiveFillerProvider; +import com.jaimemartz.playerbalancer.connection.provider.types.progressive.ProgressiveLowestProvider; +import com.jaimemartz.playerbalancer.connection.provider.types.progressive.ProgressiveProvider; +import com.jaimemartz.playerbalancer.connection.provider.types.random.RandomFillerProvider; +import com.jaimemartz.playerbalancer.connection.provider.types.random.RandomLowestProvider; +import com.jaimemartz.playerbalancer.connection.provider.types.random.RandomProvider; import com.jaimemartz.playerbalancer.section.ServerSection; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -28,8 +34,8 @@ public enum ProviderType { } }, - LOWEST { - LowestProvider provider = new LowestProvider(); + RANDOM_LOWEST { + RandomLowestProvider provider = new RandomLowestProvider(); @Override public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List servers, ProxiedPlayer player) { @@ -37,8 +43,8 @@ public enum ProviderType { } }, - BALANCED { - BalancedProvider provider = new BalancedProvider(); + RANDOM_FILLER { + RandomFillerProvider provider = new RandomFillerProvider(); @Override public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List servers, ProxiedPlayer player) { @@ -55,8 +61,17 @@ public enum ProviderType { } }, - FILLER { - FillerProvider provider = new FillerProvider(); + PROGRESSIVE_LOWEST { + ProgressiveLowestProvider provider = new ProgressiveLowestProvider(); + + @Override + public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List servers, ProxiedPlayer player) { + return provider.requestTarget(plugin, section, servers, player); + } + }, + + PROGRESSIVE_FILLER { + ProgressiveFillerProvider provider = new ProgressiveFillerProvider(); @Override public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List servers, ProxiedPlayer player) { diff --git a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/FillerProvider.java b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/progressive/ProgressiveFillerProvider.java similarity index 87% rename from Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/FillerProvider.java rename to Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/progressive/ProgressiveFillerProvider.java index ae50a9e..ca06e93 100644 --- a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/FillerProvider.java +++ b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/progressive/ProgressiveFillerProvider.java @@ -1,4 +1,4 @@ -package com.jaimemartz.playerbalancer.connection.provider.types; +package com.jaimemartz.playerbalancer.connection.provider.types.progressive; import com.jaimemartz.playerbalancer.PlayerBalancer; import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider; @@ -9,7 +9,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import java.util.List; -public class FillerProvider extends AbstractProvider { +public class ProgressiveFillerProvider extends AbstractProvider { @Override public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List servers, ProxiedPlayer player) { int max = Integer.MIN_VALUE; diff --git a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/LowestProvider.java b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/progressive/ProgressiveLowestProvider.java similarity index 84% rename from Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/LowestProvider.java rename to Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/progressive/ProgressiveLowestProvider.java index 2618421..30fc042 100644 --- a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/LowestProvider.java +++ b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/progressive/ProgressiveLowestProvider.java @@ -1,4 +1,4 @@ -package com.jaimemartz.playerbalancer.connection.provider.types; +package com.jaimemartz.playerbalancer.connection.provider.types.progressive; import com.jaimemartz.playerbalancer.PlayerBalancer; import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider; @@ -8,7 +8,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import java.util.List; -public class LowestProvider extends AbstractProvider { +public class ProgressiveLowestProvider extends AbstractProvider { @Override public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List servers, ProxiedPlayer player) { int min = Integer.MAX_VALUE; diff --git a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/ProgressiveProvider.java b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/progressive/ProgressiveProvider.java similarity index 81% rename from Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/ProgressiveProvider.java rename to Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/progressive/ProgressiveProvider.java index d22414e..5329989 100644 --- a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/ProgressiveProvider.java +++ b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/progressive/ProgressiveProvider.java @@ -1,4 +1,4 @@ -package com.jaimemartz.playerbalancer.connection.provider.types; +package com.jaimemartz.playerbalancer.connection.provider.types.progressive; import com.jaimemartz.playerbalancer.PlayerBalancer; import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider; @@ -8,7 +8,6 @@ import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; import java.util.List; -import java.util.concurrent.ThreadLocalRandom; public class ProgressiveProvider extends AbstractProvider { @Override @@ -20,6 +19,6 @@ public class ProgressiveProvider extends AbstractProvider { } } - return servers.get(ThreadLocalRandom.current().nextInt(servers.size())); + return null; } } diff --git a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/random/RandomFillerProvider.java b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/random/RandomFillerProvider.java new file mode 100644 index 0000000..d68178e --- /dev/null +++ b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/random/RandomFillerProvider.java @@ -0,0 +1,35 @@ +package com.jaimemartz.playerbalancer.connection.provider.types.random; + +import com.jaimemartz.playerbalancer.PlayerBalancer; +import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider; +import com.jaimemartz.playerbalancer.section.ServerSection; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; + +import java.util.ArrayList; +import java.util.List; + +import static com.jaimemartz.playerbalancer.utils.RandomUtils.random; + +public class RandomFillerProvider extends AbstractProvider { + @Override + public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List servers, ProxiedPlayer player) { + List results = new ArrayList<>(); + int max = Integer.MIN_VALUE; + + for (ServerInfo server : servers) { + int count = plugin.getNetworkManager().getPlayers(server); + + if (count >= max) { + if (count > max) { + max = count; + results.clear(); + } + + results.add(server); + } + } + + return random(results); + } +} \ No newline at end of file diff --git a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/BalancedProvider.java b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/random/RandomLowestProvider.java similarity index 78% rename from Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/BalancedProvider.java rename to Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/random/RandomLowestProvider.java index da36681..cd9f593 100644 --- a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/BalancedProvider.java +++ b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/random/RandomLowestProvider.java @@ -1,4 +1,4 @@ -package com.jaimemartz.playerbalancer.connection.provider.types; +package com.jaimemartz.playerbalancer.connection.provider.types.random; import com.jaimemartz.playerbalancer.PlayerBalancer; import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider; @@ -8,9 +8,10 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ThreadLocalRandom; -public class BalancedProvider extends AbstractProvider { +import static com.jaimemartz.playerbalancer.utils.RandomUtils.random; + +public class RandomLowestProvider extends AbstractProvider { @Override public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List servers, ProxiedPlayer player) { List results = new ArrayList<>(); @@ -28,6 +29,6 @@ public class BalancedProvider extends AbstractProvider { } } - return results.get(ThreadLocalRandom.current().nextInt(results.size())); + return random(results); } } \ No newline at end of file diff --git a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/RandomProvider.java b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/random/RandomProvider.java similarity index 73% rename from Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/RandomProvider.java rename to Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/random/RandomProvider.java index c18db37..a2d189f 100644 --- a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/RandomProvider.java +++ b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/connection/provider/types/random/RandomProvider.java @@ -1,4 +1,4 @@ -package com.jaimemartz.playerbalancer.connection.provider.types; +package com.jaimemartz.playerbalancer.connection.provider.types.random; import com.jaimemartz.playerbalancer.PlayerBalancer; import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider; @@ -7,11 +7,12 @@ import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; import java.util.List; -import java.util.concurrent.ThreadLocalRandom; + +import static com.jaimemartz.playerbalancer.utils.RandomUtils.random; public class RandomProvider extends AbstractProvider { @Override public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List servers, ProxiedPlayer player) { - return servers.get(ThreadLocalRandom.current().nextInt(servers.size())); + return random(servers); } } \ No newline at end of file diff --git a/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/utils/RandomUtils.java b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/utils/RandomUtils.java new file mode 100644 index 0000000..f1b92f8 --- /dev/null +++ b/Main Plugin/src/main/java/com/jaimemartz/playerbalancer/utils/RandomUtils.java @@ -0,0 +1,12 @@ +package com.jaimemartz.playerbalancer.utils; + +import java.security.SecureRandom; +import java.util.List; + +public class RandomUtils { + private static final SecureRandom instance = new SecureRandom(); + + public static T random(List list) { + return list.get(instance.nextInt(list.size())); + } +} diff --git a/Main Plugin/src/main/resources/default.conf b/Main Plugin/src/main/resources/default.conf index 6481c88..b584cb0 100644 --- a/Main Plugin/src/main/resources/default.conf +++ b/Main Plugin/src/main/resources/default.conf @@ -42,21 +42,21 @@ messages { features { balancer { # Here you have an example of what you can do with the sections - # The plugin will print out info telling you if your config is right or not - # If a section does not have a provider it will be inherit from the parent # The best way to understand this is to play around with it - # You can use regex to match a set of servers instead of adding each server # You can have as many sections as you want, there is no limit here - # When connecting to a server in a section, you get redirected + # If a section does not have a provider it will try to inherit it from the parent + # When connecting to a server on a section while not being on it already, you get distributed + # You can use regex to match a set of servers instead of adding each server individually - # Providers you can use: - # NONE: Returns no server (no one will be able to connect to this section) - # BALANCED: Returns a server between the ones with the least players online - # LOWEST: Returns the first server found with the least players online - # RANDOM: Returns a server selected by a RNG algorithm (random) - # PROGRESSIVE: Returns the first server found that is not full - # FILLER: Returns the server with the most players online that is not full - # EXTERNAL: Returns the server determined by a provider created by other plugin + # Providers you can use: (you can request more!) + # NONE: Returns no server (no one will be able to connect to this section) + # RANDOM: Returns a random server, generated by SecureRandom + # RANDOM_LOWEST: Returns a random server between the ones with the least players online + # RANDOM_FILLER: Returns a random server between the ones with the most players online that is not full + # PROGRESSIVE: Returns the first server that is not full + # PROGRESSIVE_LOWEST: Returns the first server with the least players online + # PROGRESSIVE_FILLER: Returns the first server with the most players online that is not full + # EXTERNAL: Returns the server calculated by a provider created by other plugin sections { auth-lobbies {