Browse Source

Don't pass BlockingQueue into handlers.

Handlers provide the comparator used by BlockingQueues, creating
a circular dependency.
pull/123/head
Chris Smith 7 years ago
parent
commit
8f565f86cb

+ 10
- 1
irc/src/com/dmdirc/parser/irc/outputqueue/OutputQueue.java View File

@@ -133,6 +133,15 @@ public class OutputQueue {
133 133
         }
134 134
     }
135 135
 
136
+    /**
137
+     * Direct access to the queue of items waiting to be sent.
138
+     *
139
+     * @return This queue's backing queue.
140
+     */
141
+    public BlockingQueue<QueueItem> getQueue() {
142
+        return queue;
143
+    }
144
+
136 145
     /**
137 146
      * Should we be discarding?
138 147
      *
@@ -204,7 +213,7 @@ public class OutputQueue {
204 213
         if (queueEnabled && priority != QueuePriority.IMMEDIATE) {
205 214
             synchronized (queueHandlerLock) {
206 215
                 if (queueHandler == null || !queueHandler.isAlive()) {
207
-                    queueHandler = queueHandlerFactory.getQueueHandler(this, queue, out);
216
+                    queueHandler = queueHandlerFactory.getQueueHandler(this, out);
208 217
                     queueHandler.start();
209 218
                 }
210 219
 

+ 1
- 5
irc/src/com/dmdirc/parser/irc/outputqueue/PriorityQueueHandler.java View File

@@ -24,7 +24,6 @@ package com.dmdirc.parser.irc.outputqueue;
24 24
 
25 25
 import java.io.PrintWriter;
26 26
 import java.time.Duration;
27
-import java.util.concurrent.BlockingQueue;
28 27
 
29 28
 /**
30 29
  * This does no rate limiting, and just sends based on priority.
@@ -35,15 +34,12 @@ public class PriorityQueueHandler extends QueueHandler {
35 34
      * Create a new PriorityQueueHandler.
36 35
      *
37 36
      * @param outputQueue Owner of this Queue Handler
38
-     * @param queue Queue to use
39 37
      * @param out Output Stream to use
40 38
      */
41 39
     public PriorityQueueHandler(
42 40
             final OutputQueue outputQueue,
43
-            final BlockingQueue<QueueItem> queue,
44 41
             final PrintWriter out) {
45 42
         super(outputQueue,
46
-                queue,
47 43
                 QueueComparators.byPriorityThenNumber(Duration.ofSeconds(10)),
48 44
                 out);
49 45
     }
@@ -61,7 +57,7 @@ public class PriorityQueueHandler extends QueueHandler {
61 57
     public void run() {
62 58
         try {
63 59
             while (outputQueue.isQueueEnabled()) {
64
-                final QueueItem item = queue.take();
60
+                final QueueItem item = outputQueue.getQueue().take();
65 61
 
66 62
                 sendLine(item.getLine());
67 63
             }

+ 0
- 6
irc/src/com/dmdirc/parser/irc/outputqueue/QueueHandler.java View File

@@ -28,15 +28,12 @@ import java.io.PrintWriter;
28 28
 import java.time.LocalDateTime;
29 29
 import java.time.temporal.ChronoUnit;
30 30
 import java.util.Comparator;
31
-import java.util.concurrent.BlockingQueue;
32 31
 
33 32
 /**
34 33
  * Sending queue.
35 34
  */
36 35
 public abstract class QueueHandler extends Thread implements Comparator<QueueItem> {
37 36
 
38
-    /** Queue we are handling. */
39
-    protected final BlockingQueue<QueueItem> queue;
40 37
     /** The output queue that owns us. */
41 38
     protected OutputQueue outputQueue;
42 39
     /** Comparator to use to sort queue items. */
@@ -48,18 +45,15 @@ public abstract class QueueHandler extends Thread implements Comparator<QueueIte
48 45
      * Create a new Queue Thread.
49 46
      *
50 47
      * @param outputQueue the OutputQueue that owns us.
51
-     * @param queue Queue to handle.
52 48
      * @param comparator Comparator to use to sort items in the queue.
53 49
      * @param out Writer to send to.
54 50
      */
55 51
     public QueueHandler(
56 52
             final OutputQueue outputQueue,
57
-            final BlockingQueue<QueueItem> queue,
58 53
             final Comparator<QueueItem> comparator,
59 54
             final PrintWriter out) {
60 55
         super("IRC Parser queue handler");
61 56
 
62
-        this.queue = queue;
63 57
         this.comparator = comparator;
64 58
         this.out = out;
65 59
         this.outputQueue = outputQueue;

+ 2
- 4
irc/src/com/dmdirc/parser/irc/outputqueue/QueueHandlerFactory.java View File

@@ -23,7 +23,6 @@
23 23
 package com.dmdirc.parser.irc.outputqueue;
24 24
 
25 25
 import java.io.PrintWriter;
26
-import java.util.concurrent.BlockingQueue;
27 26
 
28 27
 /**
29 28
  * A QueueHandlerFactory produces QueueHandlers for OutputQueue.
@@ -34,10 +33,9 @@ public interface QueueHandlerFactory {
34 33
      * Get a new QueueHandler instance as needed.
35 34
      *
36 35
      * @param outputQueue the OutputQueue that will own this QueueHandler
37
-     * @param queue The queue to handle.
38 36
      * @param out Where to send crap.
39 37
      * @return the new queue handler object.
40 38
      */
41
-    QueueHandler getQueueHandler(final OutputQueue outputQueue,
42
-            final BlockingQueue<QueueItem> queue, final PrintWriter out);
39
+    QueueHandler getQueueHandler(final OutputQueue outputQueue, final PrintWriter out);
40
+
43 41
 }

+ 4
- 7
irc/src/com/dmdirc/parser/irc/outputqueue/SimpleRateLimitedQueueHandler.java View File

@@ -25,7 +25,6 @@ package com.dmdirc.parser.irc.outputqueue;
25 25
 import com.dmdirc.parser.common.QueuePriority;
26 26
 
27 27
 import java.io.PrintWriter;
28
-import java.util.concurrent.BlockingQueue;
29 28
 
30 29
 /**
31 30
  * This is a simple rate limiting queue.
@@ -54,14 +53,12 @@ public class SimpleRateLimitedQueueHandler extends QueueHandler {
54 53
      * Create a new SimpleRateLimitedQueueHandler.
55 54
      *
56 55
      * @param outputQueue Owner of this Queue Handler
57
-     * @param queue Queue to use
58 56
      * @param out Output Stream to use
59 57
      */
60 58
     public SimpleRateLimitedQueueHandler(
61 59
             final OutputQueue outputQueue,
62
-            final BlockingQueue<QueueItem> queue,
63 60
             final PrintWriter out) {
64
-        super(outputQueue, queue, QueueComparators.byPriorityThenNumber(), out);
61
+        super(outputQueue, QueueComparators.byPriorityThenNumber(), out);
65 62
     }
66 63
 
67 64
     /**
@@ -182,7 +179,7 @@ public class SimpleRateLimitedQueueHandler extends QueueHandler {
182 179
                 // It has been longer than limitTime and we are still shown as
183 180
                 // limiting, check to see if the queue is empty or not, if it is
184 181
                 // disable limiting.
185
-                if (queue.isEmpty()) {
182
+                if (outputQueue.getQueue().isEmpty()) {
186 183
                     isLimiting = false;
187 184
                 }
188 185
             } else {
@@ -203,14 +200,14 @@ public class SimpleRateLimitedQueueHandler extends QueueHandler {
203 200
     public void run() {
204 201
         try {
205 202
             while (outputQueue.isQueueEnabled()) {
206
-                final QueueItem item = queue.take();
203
+                final QueueItem item = outputQueue.getQueue().take();
207 204
 
208 205
                 sendLine(item.getLine());
209 206
 
210 207
                 final boolean doSleep;
211 208
                 synchronized (this) {
212 209
                     doSleep = isLimiting;
213
-                    if (isLimiting && queue.isEmpty()) {
210
+                    if (isLimiting && outputQueue.getQueue().isEmpty()) {
214 211
                         isLimiting = false;
215 212
                     }
216 213
                 }

Loading…
Cancel
Save