From b9dfd7db54e28065c301098010e89be02dfdac9b Mon Sep 17 00:00:00 2001 From: Luck Date: Sat, 30 Dec 2017 12:16:34 +0000 Subject: [PATCH] Execute commands sequentially on a single thread executor --- .../luckperms/common/backup/Importer.java | 17 +++++++---------- .../common/commands/CommandManager.java | 19 +++++++++++-------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/common/src/main/java/me/lucko/luckperms/common/backup/Importer.java b/common/src/main/java/me/lucko/luckperms/common/backup/Importer.java index 8206342d2..853dd9c85 100644 --- a/common/src/main/java/me/lucko/luckperms/common/backup/Importer.java +++ b/common/src/main/java/me/lucko/luckperms/common/backup/Importer.java @@ -196,7 +196,8 @@ public class Importer implements Runnable { @Getter private static class ImportCommand extends DummySender { - private static final Splitter SPACE_SPLIT = Splitter.on(" "); + private static final Splitter ARGUMENT_SPLITTER = Splitter.on(CommandManager.COMMAND_SEPARATOR_PATTERN).omitEmptyStrings(); + private static final Splitter SPACE_SPLITTER = Splitter.on(" "); private final CommandManager commandManager; private final int id; @@ -231,13 +232,9 @@ public class Importer implements Runnable { } try { - CommandResult result = commandManager.onCommand( - this, - "lp", - CommandManager.stripQuotes(Splitter.on(CommandManager.COMMAND_SEPARATOR_PATTERN).omitEmptyStrings().splitToList(getCommand())) - ).get(); + List args = CommandManager.stripQuotes(ARGUMENT_SPLITTER.splitToList(getCommand())); + CommandResult result = commandManager.onCommand(this, "lp", args, Runnable::run).get(); setResult(result); - } catch (Exception e) { setResult(CommandResult.FAILURE); e.printStackTrace(); @@ -253,7 +250,7 @@ public class Importer implements Runnable { return null; } - String targetUser = SPACE_SPLIT.split(subCmd).iterator().next(); + String targetUser = SPACE_SPLITTER.split(subCmd).iterator().next(); return "u:" + targetUser; } @@ -263,7 +260,7 @@ public class Importer implements Runnable { return null; } - String targetGroup = SPACE_SPLIT.split(subCmd).iterator().next(); + String targetGroup = SPACE_SPLITTER.split(subCmd).iterator().next(); return "g:" + targetGroup; } @@ -273,7 +270,7 @@ public class Importer implements Runnable { return null; } - String targetTrack = SPACE_SPLIT.split(subCmd).iterator().next(); + String targetTrack = SPACE_SPLITTER.split(subCmd).iterator().next(); return "t:" + targetTrack; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/CommandManager.java b/common/src/main/java/me/lucko/luckperms/common/commands/CommandManager.java index ec7be6b22..005ed93f4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/CommandManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/CommandManager.java @@ -72,6 +72,9 @@ import java.util.ListIterator; import java.util.Optional; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -90,6 +93,9 @@ public class CommandManager { @Getter private final LuckPermsPlugin plugin; + // the default executor to run commands on + private final ExecutorService executor = Executors.newSingleThreadExecutor(); + @Getter private final List mainCommands; @@ -126,14 +132,11 @@ public class CommandManager { .build(); } - /** - * Generic on command method to be called from the command executor object of the platform - * Unlike {@link #execute(Sender, String, List)}, this method is called in a new thread - * @param sender who sent the command - * @param label the command label used - * @param args the arguments provided - */ public CompletableFuture onCommand(Sender sender, String label, List args) { + return onCommand(sender, label, args, executor); + } + + public CompletableFuture onCommand(Sender sender, String label, List args, Executor executor) { return CompletableFuture.supplyAsync(() -> { try { return execute(sender, label, args); @@ -142,7 +145,7 @@ public class CommandManager { e.printStackTrace(); return null; } - }, plugin.getScheduler().async()); + }, executor); } @SuppressWarnings("unchecked")