X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fdata%2Fsink%2FIcecast2Sink.java;h=1c5a3b13a6a878d0fc11308b10f17013253c1e5b;hb=eacf380129e247dd03f7d054d67e34cb43658959;hp=638e15ba7c96e5cb5b6ff67486c4ba414a91040a;hpb=563fd3ebac7963e50ba3756fd6d9156b759308d4;p=sonitus.git diff --git a/src/main/java/net/pterodactylus/sonitus/data/sink/Icecast2Sink.java b/src/main/java/net/pterodactylus/sonitus/data/sink/Icecast2Sink.java index 638e15b..1c5a3b1 100644 --- a/src/main/java/net/pterodactylus/sonitus/data/sink/Icecast2Sink.java +++ b/src/main/java/net/pterodactylus/sonitus/data/sink/Icecast2Sink.java @@ -23,28 +23,28 @@ import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.net.URLEncoder; -import java.util.Arrays; +import java.util.Collections; +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.io.InputStreamDrainer; -import com.google.common.base.Function; -import com.google.common.base.Joiner; -import com.google.common.base.Optional; -import com.google.common.collect.FluentIterable; 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 David ‘Bombe’ Roden */ -public class Icecast2Sink implements Sink { +public class Icecast2Sink extends AbstractFilter { /** The logger. */ private static final Logger logger = Logger.getLogger(Icecast2Sink.class.getName()); @@ -73,6 +73,7 @@ public class Icecast2Sink implements Sink { /** Whether to publish the server. */ private final boolean publishServer; + /** The output stream to the server. */ private OutputStream socketOutputStream; /** @@ -97,6 +98,7 @@ public class Icecast2Sink implements Sink { * not publish it */ 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; @@ -108,10 +110,15 @@ public class Icecast2Sink implements Sink { } // - // SINK METHODS + // FILTER METHODS // @Override + public List> controllers() { + return Collections.emptyList(); + } + + @Override public void open(Metadata metadata) throws IOException { logger.info(String.format("Connecting to %s:%d...", server, port)); Socket socket = new Socket(server, port); @@ -145,17 +152,12 @@ public class Icecast2Sink implements Sink { @Override public void metadataUpdated(final Metadata metadata) { + super.metadataUpdated(metadata); new Thread(new Runnable() { @Override public void run() { - String metadataString = String.format("%s (%s)", Joiner.on(" - ").skipNulls().join(FluentIterable.from(Arrays.asList(metadata.artist(), metadata.name())).transform(new Function, Object>() { - - @Override - public Object apply(Optional input) { - return input.orNull(); - } - })), "Sonitus"); + String metadataString = String.format("%s (%s)", metadata.title(), "Sonitus"); logger.info(String.format("Updating metadata to %s", metadataString)); Socket socket = null; @@ -188,8 +190,8 @@ public class Icecast2Sink implements Sink { } @Override - public void process(byte[] buffer) throws IOException { - socketOutputStream.write(buffer); + public void process(DataPacket dataPacket) throws IOException { + socketOutputStream.write(dataPacket.buffer()); socketOutputStream.flush(); }