From 34dd2161ef69320e79c84bf1624ce96b354de2b5 Mon Sep 17 00:00:00 2001 From: Denny Date: Fri, 10 Feb 2017 17:05:28 -0500 Subject: [PATCH] Resolves #176 - 2 issues: A) streaming connection errors - detects errors and if currently connected, resets the connection. B)duplicate calls being streamed - issue with comparison of broadcast channels allowed the same broadcast channel to be queued two or more times for the list of channels to stream a recording. --- src/alias/id/broadcast/BroadcastChannel.java | 149 ++++++++++-------- src/audio/broadcast/BroadcastModel.java | 4 +- .../icecast/IcecastTCPAudioBroadcaster.java | 10 +- src/record/AudioRecorder.java | 23 ++- 4 files changed, 115 insertions(+), 71 deletions(-) diff --git a/src/alias/id/broadcast/BroadcastChannel.java b/src/alias/id/broadcast/BroadcastChannel.java index f0baf630..59a32090 100644 --- a/src/alias/id/broadcast/BroadcastChannel.java +++ b/src/alias/id/broadcast/BroadcastChannel.java @@ -25,76 +25,99 @@ import javax.xml.bind.annotation.XmlAttribute; public class BroadcastChannel extends AliasID implements Comparable { - private String mChannelName; + private String mChannelName; - public BroadcastChannel() - { - //JAXB Constructor - } + public BroadcastChannel() + { + //JAXB Constructor + } - @Override - public int compareTo(BroadcastChannel other) - { - if(mChannelName != null && other.getChannelName() != null) - { - return mChannelName.compareTo(other.getChannelName()); - } - else if(mChannelName != null) - { - return -1; - } - else - { - return 1; - } - } + @Override + public int compareTo(BroadcastChannel other) + { + if(mChannelName != null && other.getChannelName() != null) + { + return mChannelName.compareTo(other.getChannelName()); + } + else if(mChannelName != null) + { + return -1; + } + else + { + return 1; + } + } - /** - * Creates a named broadcast channel - */ - public BroadcastChannel(String channelName) - { - mChannelName = channelName; - } + @Override + public boolean equals(Object o) + { + if(this == o) + { + return true; + } + if(!(o instanceof BroadcastChannel)) + { + return false; + } - /** - * Name of the broadcastAudio channel configuration - */ - @XmlAttribute(name="channel") - public String getChannelName() - { - return mChannelName; - } + BroadcastChannel that = (BroadcastChannel)o; - /** - * Sets the name of the broadcastAudio channel configuration - */ - public void setChannelName(String channel) - { - mChannelName = channel; - } + return getChannelName() != null ? getChannelName().equals(that.getChannelName()) : that.getChannelName() == null; + } - @Override - public AliasIDType getType() - { - return AliasIDType.BROADCAST_CHANNEL; - } + @Override + public int hashCode() + { + return getChannelName() != null ? getChannelName().hashCode() : 0; + } - @Override - public boolean isValid() - { - return mChannelName != null; - } + /** + * Creates a named broadcast channel + */ + public BroadcastChannel(String channelName) + { + mChannelName = channelName; + } - @Override - public boolean matches( AliasID id ) - { - return false; - } - - @Override - public String toString() - { + /** + * Name of the broadcastAudio channel configuration + */ + @XmlAttribute(name = "channel") + public String getChannelName() + { + return mChannelName; + } + + /** + * Sets the name of the broadcastAudio channel configuration + */ + public void setChannelName(String channel) + { + mChannelName = channel; + } + + @Override + public AliasIDType getType() + { + return AliasIDType.BROADCAST_CHANNEL; + } + + @Override + public boolean isValid() + { + return mChannelName != null; + } + + @Override + public boolean matches(AliasID id) + { + return false; + } + + @Override + public String toString() + { if(isValid()) { return "Broadcast Channel: " + mChannelName; @@ -103,5 +126,5 @@ public class BroadcastChannel extends AliasID implements Comparable broadcastChannels = metadata.getBroadcastChannels(); + + for(BroadcastChannel broadcastChannel : broadcastChannels) { String channelName = broadcastChannel.getChannelName(); diff --git a/src/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java b/src/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java index 846bd92c..a0db228d 100644 --- a/src/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java +++ b/src/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java @@ -248,6 +248,12 @@ public class IcecastTCPAudioBroadcaster extends IcecastAudioBroadcaster { String reason = ioe.getMessage(); + if(connected()) + { + mLog.info("Streaming connection error detected - resetting connection - " + reason); + disconnect(); + connect(); + } if(reason.startsWith("Connection reset")) { mLog.info("Streaming connection reset by remote server - reestablishing connection"); @@ -264,14 +270,14 @@ public class IcecastTCPAudioBroadcaster extends IcecastAudioBroadcaster { setBroadcastState(BroadcastState.ERROR); disconnect(); - mLog.error("Unrecognized IO error: " + reason + ". Streaming halted."); + mLog.error("Unrecognized IO error: " + reason + ". Streaming halted.", cause); } } else { setBroadcastState(BroadcastState.ERROR); disconnect(); - mLog.error("Unspecified IO error - streaming halted."); + mLog.error("Unspecified IO error - streaming halted.", cause); } } else diff --git a/src/record/AudioRecorder.java b/src/record/AudioRecorder.java index 4d118351..15723eba 100644 --- a/src/record/AudioRecorder.java +++ b/src/record/AudioRecorder.java @@ -163,7 +163,10 @@ public abstract class AudioRecorder extends Module implements Listener listener) { @@ -171,8 +174,14 @@ public abstract class AudioRecorder extends Module implements Listener