From: David ‘Bombe’ Roden <bombe@pterodactylus.net>
Date: Sat, 16 Mar 2013 00:28:18 +0000 (+0100)
Subject: Add finish() method to Connection.
X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=3b2756c528ffa628472cf0b33a440d545607102d;p=sonitus.git

Add finish() method to Connection.
---

diff --git a/src/main/java/net/pterodactylus/sonitus/data/Connection.java b/src/main/java/net/pterodactylus/sonitus/data/Connection.java
index b8bee32..762ba02 100644
--- a/src/main/java/net/pterodactylus/sonitus/data/Connection.java
+++ b/src/main/java/net/pterodactylus/sonitus/data/Connection.java
@@ -82,4 +82,12 @@ public abstract class Connection implements Runnable {
 	 */
 	protected abstract void feed(byte[] buffer) throws IOException;
 
+	/**
+	 * Notifies the sink that the source does not deliver any more data.
+	 *
+	 * @throws IOException
+	 * 		if an I/O error occurs
+	 */
+	protected abstract void finish() throws IOException;
+
 }
diff --git a/src/main/java/net/pterodactylus/sonitus/data/filter/ExternalFilter.java b/src/main/java/net/pterodactylus/sonitus/data/filter/ExternalFilter.java
index c3ab508..3b2b6b1 100644
--- a/src/main/java/net/pterodactylus/sonitus/data/filter/ExternalFilter.java
+++ b/src/main/java/net/pterodactylus/sonitus/data/filter/ExternalFilter.java
@@ -116,6 +116,11 @@ public abstract class ExternalFilter implements Filter {
 				protected void feed(byte[] buffer) throws IOException {
 					processInput.write(buffer);
 				}
+
+				@Override
+				protected void finish() throws IOException {
+					processInput.close();
+				}
 			}).start();
 		} catch (IOException ioe1) {
 
diff --git a/src/main/java/net/pterodactylus/sonitus/data/sink/AudioSink.java b/src/main/java/net/pterodactylus/sonitus/data/sink/AudioSink.java
index 5d1ebbc..2ef61e0 100644
--- a/src/main/java/net/pterodactylus/sonitus/data/sink/AudioSink.java
+++ b/src/main/java/net/pterodactylus/sonitus/data/sink/AudioSink.java
@@ -64,6 +64,11 @@ public class AudioSink implements Sink {
 					sourceDataLine.write(buffer, 0, buffer.length);
 					logger.finest(String.format("AudioSink: Wrote %d Bytes.", buffer.length));
 				}
+
+				@Override
+				protected void finish() {
+					sourceDataLine.stop();
+				}
 			}).start();
 		}
 		catch (LineUnavailableException lue1) {