X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fdata%2FPipeline.java;h=4e6a457ad8c87704fbb4e4489e6170ad04e132d1;hb=7fd39e525f49730b76e756b613f20b9dd72808b9;hp=f36f3c9c1e49fd886cbd5a180389f3977bcc4730;hpb=bac649fc4b83476a15fab2b6f25ba935d98be2df;p=sonitus.git diff --git a/src/main/java/net/pterodactylus/sonitus/data/Pipeline.java b/src/main/java/net/pterodactylus/sonitus/data/Pipeline.java index f36f3c9..4e6a457 100644 --- a/src/main/java/net/pterodactylus/sonitus/data/Pipeline.java +++ b/src/main/java/net/pterodactylus/sonitus/data/Pipeline.java @@ -35,6 +35,7 @@ import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; +import com.google.common.util.concurrent.MoreExecutors; /** * A pipeline is responsible for streaming audio data from a {@link Source} to @@ -234,7 +235,7 @@ public class Pipeline { this.source = source; this.sinks = sinks; if (sinks.size() == 1) { - executorService = Executors.newSingleThreadExecutor(); + executorService = MoreExecutors.sameThreadExecutor(); } else { executorService = Executors.newCachedThreadPool(); } @@ -260,7 +261,14 @@ public class Pipeline { try { final Metadata lastMetadata = firstMetadata; final Metadata metadata = firstMetadata = source.metadata(); - final byte[] buffer = source.get(4096); + final byte[] buffer; + try { + logger.finest(String.format("Getting %d bytes from %s...", 4096, source)); + buffer = source.get(4096); + logger.finest(String.format("Got %d bytes from %s.", buffer.length, source)); + } catch (IOException ioe1) { + throw new IOException(String.format("I/O error while reading from %s.", source), ioe1); + } List> futures = executorService.invokeAll(FluentIterable.from(sinks).transform(new Function>() { @Override @@ -272,7 +280,13 @@ public class Pipeline { if (!metadata.equals(lastMetadata)) { sink.metadataUpdated(metadata); } - sink.process(buffer); + try { + logger.finest(String.format("Sending %d bytes to %s.", buffer.length, sink)); + sink.process(buffer); + logger.finest(String.format("Sent %d bytes to %s.", buffer.length, sink)); + } catch (IOException ioe1) { + throw new IOException(String.format("I/O error while writing to %s", sink), ioe1); + } return null; } }; @@ -285,12 +299,15 @@ public class Pipeline { } catch (IOException e) { /* TODO */ e.printStackTrace(); + break; } catch (InterruptedException e) { /* TODO */ e.printStackTrace(); + break; } catch (ExecutionException e) { /* TODO */ e.printStackTrace(); + break; } } }