T00thpick1 %!s(int64=12) %!d(string=hai) anos
pai
achega
d59954d0f1

+ 3 - 4
src/main/java/com/gmail/nossr50/commands/player/McrankCommand.java

@@ -123,16 +123,15 @@ public class McrankCommand implements CommandExecutor {
     }
 
     private void sqlDisplay(CommandSender sender, String playerName) {
-        //TODO: Localize messages
+        // TODO: Localize messages
         if (mcMMO.queueManager.contains(sender.getName())) {
             sender.sendMessage(ChatColor.RED + "Please wait for your previous command to process");
         }
 
         if (!mcMMO.queueManager.queue(new McRankAsync(playerName, sender))) {
-            // This will only run if for some reason it is unable to add to the queue
-            sender.sendMessage(ChatColor.RED + "Unable to add to queue.");
+            sender.sendMessage(ChatColor.RED + "Queue is full");
         }
 
-        sender.sendMessage(ChatColor.YELLOW + "Calculating mcMMO rankings...");
+        sender.sendMessage(ChatColor.YELLOW + "Calculating rankings...");
     }
 }

+ 3 - 5
src/main/java/com/gmail/nossr50/commands/player/MctopCommand.java

@@ -123,17 +123,15 @@ public class MctopCommand implements CommandExecutor {
     }
 
     private void sqlDisplay(int page, String query, CommandSender sender) {
-        //TODO: Localize messages
+        // TODO: Localize messages
         if (mcMMO.queueManager.contains(sender.getName())) {
             sender.sendMessage(ChatColor.RED + "Please wait for your previous command to process");
-            return;
         }
 
         if (!mcMMO.queueManager.queue(new McTopAsync(page, query, sender))) {
-            // This will only run if for some reason it is unable to add to the queue
-            sender.sendMessage(ChatColor.RED + "Unable to add to queue.");
+            sender.sendMessage(ChatColor.RED + "Queue is full");
         }
 
-        sender.sendMessage(ChatColor.YELLOW + "Calculating mcMMO rankings...");
+        sender.sendMessage(ChatColor.YELLOW + "Calculating leaderboards...");
     }
 }

+ 36 - 27
src/main/java/com/gmail/nossr50/database/queuemanager/AsyncQueueManager.java

@@ -1,25 +1,28 @@
 package com.gmail.nossr50.database.queuemanager;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.LinkedBlockingQueue;
 
-public class AsyncQueueManager implements Runnable {
-    private LinkedBlockingQueue<Queueable> queue;
-    private boolean running;
-    
-    public AsyncQueueManager() {
-        this.queue = new LinkedBlockingQueue<Queueable>();
-        this.running = true;
-    }
+import org.bukkit.scheduler.BukkitScheduler;
 
-    @Override
-    public void run() {
-        while(running) {
-            try {
-                queue.take().run();
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
+import com.gmail.nossr50.mcMMO;
+
+public class AsyncQueueManager {
+
+    private List<Queue> queues;
+    protected LinkedBlockingQueue<Queueable> queue;;
+
+    public AsyncQueueManager(BukkitScheduler scheduler, int number) {
+        this.queues = new ArrayList<Queue>();
+
+        for (int i = 1; i <= number; i++) {
+            Queue queue = new Queue();
+            scheduler.runTaskAsynchronously(mcMMO.p, queue);
+            this.queues.add(queue);
         }
+
+        this.queue = new LinkedBlockingQueue<Queueable>();
     }
 
     public boolean queue(Queueable task) {
@@ -30,12 +33,6 @@ public class AsyncQueueManager implements Runnable {
         return queue.contains(new EqualString(player));
     }
 
-    public void disable() {
-        running = false;
-        // Throw one more Queueable into queue to unblock take()
-        queue.add(new EndThread());
-    }
-
     private class EqualString {
         private String player;
 
@@ -46,18 +43,30 @@ public class AsyncQueueManager implements Runnable {
         @Override
         public boolean equals(Object obj) {
             if (obj instanceof Queueable) {
-                return ((Queueable)obj).getPlayer().equalsIgnoreCase(player);
+                return ((Queueable) obj).getPlayer().equalsIgnoreCase(player);
             }
-
             return false;
         }
     }
 
-    private class EndThread implements Queueable {
+    public void disable() {
+        for (Queue queueThread : queues) {
+            queueThread.kill();
+        }
+
+        for (int i = 0; i < queues.size(); i++) {
+            queue.offer(new KillQueue());
+        }
+    }
+
+    public class KillQueue implements Queueable {
         @Override
-        public void run() { }
+        public void run() {
+        }
 
         @Override
-        public String getPlayer() { return null; }     
+        public String getPlayer() {
+            return null;
+        }
     }
 }

+ 25 - 0
src/main/java/com/gmail/nossr50/database/queuemanager/Queue.java

@@ -0,0 +1,25 @@
+package com.gmail.nossr50.database.queuemanager;
+
+import com.gmail.nossr50.mcMMO;
+
+public class Queue implements Runnable {
+    private boolean running;
+
+    public Queue() {
+        this.running = true;
+    }
+
+    public void run() {
+        while (running) {
+            try {
+                mcMMO.queueManager.queue.take().run();
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public void kill() {
+        this.running = false;
+    }
+}

+ 1 - 2
src/main/java/com/gmail/nossr50/mcMMO.java

@@ -464,8 +464,7 @@ public class mcMMO extends JavaPlugin {
         scheduler.scheduleSyncRepeatingTask(this, new BleedTimerTask(), 40, 40);
 
         if (Config.getInstance().getUseMySQL()) {
-            queueManager = new AsyncQueueManager();
-            scheduler.runTaskAsynchronously(this, queueManager);
+            queueManager = new AsyncQueueManager(scheduler, Config.getInstance().getQueueNumber());
         }
         
         // Old & Powerless User remover