Inject event bus.
[sonitus.git] / src / main / java / net / pterodactylus / sonitus / data / filter / MultiSourceFilter.java
index 57c313e..3c3dc7a 100644 (file)
@@ -35,6 +35,9 @@ import net.pterodactylus.sonitus.data.Format;
 import net.pterodactylus.sonitus.data.ReusableSink;
 import net.pterodactylus.sonitus.data.Source;
 
+import com.google.common.eventbus.EventBus;
+import com.google.inject.Inject;
+
 /**
  * {@link ReusableSink} implementation that supports changing the source without
  * letting the {@link net.pterodactylus.sonitus.data.Sink} know.
@@ -49,12 +52,20 @@ public class MultiSourceFilter implements Filter, ReusableSink {
        /** Object used for synchronization. */
        private final Object syncObject = new Object();
 
+       /** The event bus. */
+       private final EventBus eventBus;
+
        /** The connection. */
        private Connection connection;
 
        /** The format. */
        private Format format;
 
+       @Inject
+       public MultiSourceFilter(EventBus eventBus) {
+               this.eventBus = eventBus;
+       }
+
        @Override
        public Format format() {
                return format;
@@ -135,9 +146,11 @@ public class MultiSourceFilter implements Filter, ReusableSink {
                        while (true) {
                                /* wait for source to be set. */
                                OutputStream outputStream;
+                               Source source;
                                logger.finest("Entering synchronized block...");
                                synchronized (syncObject) {
                                        logger.finest("Entered synchronized block.");
+                                       source = this.source;
                                        while (source == null) {
                                                try {
                                                        logger.finest("Waiting for source to connect...");
@@ -145,6 +158,7 @@ public class MultiSourceFilter implements Filter, ReusableSink {
                                                } catch (InterruptedException ie1) {
                                                        /* ignore, keep waiting. */
                                                }
+                                               source = this.source;
                                        }
                                        outputStream = pipedOutputStream;
                                }