Update javadocs.
[sonitus.git] / src / main / java / net / pterodactylus / sonitus / data / sink / Icecast2Sink.java
index 87d9496..1c5a3b1 100644 (file)
@@ -28,30 +28,27 @@ import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import net.pterodactylus.sonitus.data.AbstractFilter;
 import net.pterodactylus.sonitus.data.Controller;
+import net.pterodactylus.sonitus.data.DataPacket;
+import net.pterodactylus.sonitus.data.Filter;
 import net.pterodactylus.sonitus.data.Metadata;
-import net.pterodactylus.sonitus.data.Sink;
-import net.pterodactylus.sonitus.data.event.MetadataUpdated;
 import net.pterodactylus.sonitus.io.InputStreamDrainer;
 
-import com.google.common.eventbus.EventBus;
 import com.google.common.io.BaseEncoding;
 import com.google.common.io.Closeables;
 
 /**
- * {@link net.pterodactylus.sonitus.data.Sink} implementation that delivers all
- * incoming data to an Icecast2 server.
+ * {@link Filter} implementation that delivers all incoming data to an Icecast2
+ * server.
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
-public class Icecast2Sink implements Sink {
+public class Icecast2Sink extends AbstractFilter {
 
        /** The logger. */
        private static final Logger logger = Logger.getLogger(Icecast2Sink.class.getName());
 
-       /** The event bus. */
-       private final EventBus eventBus;
-
        /** The server name. */
        private final String server;
 
@@ -79,14 +76,9 @@ public class Icecast2Sink implements Sink {
        /** The output stream to the server. */
        private OutputStream socketOutputStream;
 
-       /** The current metadata. */
-       private Metadata metadata;
-
        /**
         * Creates a new Icecast2 sink.
         *
-        * @param eventBus
-        *              The event bus
         * @param server
         *              The hostname of the server
         * @param port
@@ -105,8 +97,8 @@ public class Icecast2Sink implements Sink {
         *              {@code true} to publish the server in a public directory, {@code false} to
         *              not publish it
         */
-       public Icecast2Sink(EventBus eventBus, String server, int port, String password, String mountPoint, String serverName, String serverDescription, String genre, boolean publishServer) {
-               this.eventBus = eventBus;
+       public Icecast2Sink(String server, int port, String password, String mountPoint, String serverName, String serverDescription, String genre, boolean publishServer) {
+               super(String.format("icecast://%s:%d/%s", server, port, mountPoint));
                this.server = server;
                this.port = port;
                this.password = password;
@@ -118,28 +110,14 @@ public class Icecast2Sink implements Sink {
        }
 
        //
-       // CONTROLLED METHODS
+       // FILTER METHODS
        //
 
        @Override
-       public String name() {
-               return String.format("icecast://%s:%d/%s", server, port, mountPoint);
-       }
-
-       @Override
-       public Metadata metadata() {
-               return metadata;
-       }
-
-       @Override
        public List<Controller<?>> controllers() {
                return Collections.emptyList();
        }
 
-       //
-       // SINK METHODS
-       //
-
        @Override
        public void open(Metadata metadata) throws IOException {
                logger.info(String.format("Connecting to %s:%d...", server, port));
@@ -174,7 +152,7 @@ public class Icecast2Sink implements Sink {
 
        @Override
        public void metadataUpdated(final Metadata metadata) {
-               this.metadata = metadata;
+               super.metadataUpdated(metadata);
                new Thread(new Runnable() {
 
                        @Override
@@ -209,12 +187,11 @@ public class Icecast2Sink implements Sink {
                                }
                        }
                }).start();
-               eventBus.post(new MetadataUpdated(this, metadata));
        }
 
        @Override
-       public void process(byte[] buffer) throws IOException {
-               socketOutputStream.write(buffer);
+       public void process(DataPacket dataPacket) throws IOException {
+               socketOutputStream.write(dataPacket.buffer());
                socketOutputStream.flush();
        }