From f5e7b2236aabfcf47b03c18a9fe4f5e355861c82 Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Tue, 2 Aug 2016 13:43:22 +0700 Subject: [PATCH] Little delay in priority to cpu work. --- .../simsonic/rscPermissions/API/Settings.java | 10 +++++--- .../Bukkit/BukkitPermissionManager.java | 10 +++++--- .../Bukkit/BukkitRegionProviders.java | 2 +- .../Bukkit/Commands/BukkitCommands.java | 12 ++++----- .../Bukkit/RegionUpdateObserver.java | 25 ++++++++++++------- 5 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/main/java/ru/simsonic/rscPermissions/API/Settings.java b/src/main/java/ru/simsonic/rscPermissions/API/Settings.java index e718f75..a07fd4c 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/Settings.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/Settings.java @@ -30,9 +30,13 @@ public interface Settings + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" + "(?:/([0-9]|[1-2][0-9]|3[0-2]))$"; - public static final String DEFAULT_MMODE_MSG_PING = "{_LR}Maintenance mode"; - public static final String DEFAULT_MMODE_MSG_KICK = "{_LR}Sorry! Server is going into maintenance mode."; - public static final String DEFAULT_MMODE_MSG_JOIN = "{_LR}You are not allowed to enter when maintenance is on."; + public static final long REGION_UPDATE_SLEEP_INTERVAL = 250; + public static final long REGION_UPDATE_GRANULARITY_MIN = 20; + public static final long REGION_UPDATE_GRANULARITY_MAX = 10000; + + public static final String DEFAULT_MMODE_MSG_PING = "{_LR}Maintenance mode"; + public static final String DEFAULT_MMODE_MSG_KICK = "{_LR}Sorry! Server is going into maintenance mode."; + public static final String DEFAULT_MMODE_MSG_JOIN = "{_LR}You are not allowed to enter when maintenance is on."; public void onLoad(); public void onEnable(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java index 99fe53a..2d8034c 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java @@ -31,7 +31,7 @@ public class BukkitPermissionManager extends RestartableThread private final Map resolutions = new ConcurrentHashMap<>(); private final Map attachments = new HashMap<>(); private final Map> persistent = new HashMap<>(); - private final Map> temporary = new HashMap<>(); + // private final Map> temporary = new HashMap<>(); private final Set debug = new HashSet<>(); public void recalculateOnlinePlayers() { @@ -78,7 +78,7 @@ public class BukkitPermissionManager extends RestartableThread updateQueue.remove(player); attachments.remove(player); persistent.remove(player); - temporary.remove(player); + // temporary.remove(player); synchronized(debug) { debug.remove(player); @@ -111,14 +111,16 @@ public class BukkitPermissionManager extends RestartableThread if(pp != null && !pp.isEmpty()) for(Map.Entry row : pp.entrySet()) attachment.setPermission(row.getKey(), row.getValue()); + /* final Map tp = temporary.get(player); if(tp != null && !tp.isEmpty()) for(Map.Entry row : tp.entrySet()) attachment.setPermission(row.getKey(), row.getValue()); - // Give/Reset Server Operator status + */ + // Set/reset Server Operator status final Boolean asterisk = attachment.getPermissions().get("*"); if(rscp.settings.isAsteriskOP()) - player.setOp((asterisk != null) ? asterisk : false); + player.setOp(asterisk != null ? asterisk : false); // Show debugging information if(isDebugging(player)) player.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java index a79bf99..f04b841 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java @@ -124,7 +124,7 @@ public final class BukkitRegionProviders public synchronized Set getPlayerRegions(Player player) { Set result = regionsByPlayer.get(player); - return (result != null) ? result : Collections.emptySet(); + return result != null ? result : Collections.emptySet(); } public synchronized void removePlayer(Player player) { diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java index 70a325f..9c6e25f 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java @@ -15,12 +15,12 @@ import ru.simsonic.rscPermissions.Engine.Phrases; public class BukkitCommands { private final BukkitPluginMain rscp; - private final CommandEntity cmdEntity; - private final CommandLock cmdLock; - private final CommandFetch cmdFetch; - private final CommandDebug cmdDebug; - private final CommandReload cmdReload; - private final CommandUpdate cmdUpdate; + private final CommandEntity cmdEntity; + private final CommandLock cmdLock; + private final CommandFetch cmdFetch; + private final CommandDebug cmdDebug; + private final CommandReload cmdReload; + private final CommandUpdate cmdUpdate; public final BukkitDatabaseFetcher threadFetchDatabaseContents; public BukkitCommands(final BukkitPluginMain plugin) { diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/RegionUpdateObserver.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/RegionUpdateObserver.java index 65d1a6b..88d431d 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/RegionUpdateObserver.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/RegionUpdateObserver.java @@ -1,14 +1,14 @@ package ru.simsonic.rscPermissions.Bukkit; +import java.util.HashSet; import org.bukkit.entity.Player; import ru.simsonic.rscCommonsLibrary.RestartableThread; import ru.simsonic.rscMinecraftLibrary.Bukkit.MovingPlayersCatcher; +import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.BukkitPluginMain; public class RegionUpdateObserver extends RestartableThread { - private static final long granularityMin = 20; - private static final long granularityMax = 10000; private final BukkitPluginMain rscp; private final MovingPlayersCatcher movedPlayers = new MovingPlayersCatcher(); public RegionUpdateObserver(BukkitPluginMain rscp) @@ -27,14 +27,21 @@ public class RegionUpdateObserver extends RestartableThread Thread.currentThread().setName("rscp:" + this.getClass().getSimpleName()); Thread.currentThread().setPriority(Thread.MIN_PRIORITY); long granularity = rscp.settings.getRegionFinderGranularity(); - if(granularity < granularityMin) - granularity = granularityMin; - if(granularity > granularityMax) - granularity = granularityMax; + if(granularity < Settings.REGION_UPDATE_GRANULARITY_MIN) + granularity = Settings.REGION_UPDATE_GRANULARITY_MIN; + if(granularity > Settings.REGION_UPDATE_GRANULARITY_MAX) + granularity = Settings.REGION_UPDATE_GRANULARITY_MAX; for(; !Thread.interrupted(); Thread.sleep(granularity)) - for(Player player : movedPlayers.getMovedPlayersAsync()) - if(rscp.regionListProvider.isRegionListChanged(player)) - rscp.permissionManager.recalculatePlayer(player); + { + final HashSet players = movedPlayers.getMovedPlayersAsync(); + if(players.isEmpty()) + Thread.sleep(Settings.REGION_UPDATE_SLEEP_INTERVAL); + else + for(Player player : players) + if(rscp.regionListProvider.isRegionListChanged(player)) + rscp.permissionManager.recalculatePlayer(player); + + } } catch(InterruptedException ex) { } }