Files
sdrtrunk/src/main/java/io/github/dsheirer/audio/broadcast/AbstractAudioBroadcaster.java
2020-05-02 06:29:45 -04:00

178 lines
4.6 KiB
Java

/*
* *****************************************************************************
* Copyright (C) 2014-2020 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
* ****************************************************************************
*/
package io.github.dsheirer.audio.broadcast;
import io.github.dsheirer.sample.Listener;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Base Audio Broadcaster class
*/
public abstract class AbstractAudioBroadcaster<T extends BroadcastConfiguration> implements Listener<AudioRecording>
{
private final static Logger mLog = LoggerFactory.getLogger(AbstractAudioBroadcaster.class);
private Listener<BroadcastEvent> mBroadcastEventListener;
private T mBroadcastConfiguration;
protected ObjectProperty<BroadcastState> mBroadcastState = new SimpleObjectProperty<>(BroadcastState.READY);
protected int mStreamedAudioCount = 0;
protected int mErrorAudioCount = 0;
protected int mAgedOffAudioCount = 0;
/**
* Constructs an instance
* @param broadcastConfiguration to use for this broadcaster
*/
public AbstractAudioBroadcaster(T broadcastConfiguration)
{
mBroadcastConfiguration = broadcastConfiguration;
}
/**
* Observable broadcast state property
*/
public ObjectProperty<BroadcastState> broadcastStateProperty()
{
return mBroadcastState;
}
/**
* Current state of the broadcastAudio connection
*/
public BroadcastState getBroadcastState()
{
return mBroadcastState.get();
}
/**
* Sets or changes the broadcast state
*/
public void setBroadcastState(BroadcastState broadcastState)
{
mBroadcastState.setValue(broadcastState);
broadcast(new BroadcastEvent(this, BroadcastEvent.Event.BROADCASTER_STATE_CHANGE));
}
/**
* Starts the broadcaster
*/
public abstract void start();
/**
* Stops the broadcaster
*/
public abstract void stop();
/**
* Perform any shutdown related tasks.
*/
public abstract void dispose();
/**
* Access the configuration for the broadcaster
*/
public T getBroadcastConfiguration()
{
return mBroadcastConfiguration;
}
/**
* Registers the listener to receive broadcast events/state changes
*/
public void setListener(Listener<BroadcastEvent> listener)
{
mBroadcastEventListener = listener;
}
/**
* Removes the listener from receiving broadcast events/state changes
*/
public void removeListener()
{
mBroadcastEventListener = null;
}
/**
* Broadcasts the event to any registered listener
*/
protected void broadcast(BroadcastEvent event)
{
if(mBroadcastEventListener != null)
{
mBroadcastEventListener.receive(event);
}
}
/**
* Number of audio recordings streamed to remote server
*/
public int getStreamedAudioCount()
{
return mStreamedAudioCount;
}
/**
* Increments the streamed or uploaded audio count by one
*/
public void incrementStreamedAudioCount()
{
mStreamedAudioCount++;
}
/**
* Number of audio recordings that were removed for exceeding age limit
*/
public int getAgedOffAudioCount()
{
return mAgedOffAudioCount;
}
/**
* Increments the aged-off audio count by one
*/
public void incrementAgedOffAudioCount()
{
mAgedOffAudioCount++;
}
/**
* Number of audio recordings awaiting streaming or upload
*/
public abstract int getAudioQueueSize();
/**
* Total audio upload/stream error count
*/
public int getAudioErrorCount()
{
return mErrorAudioCount;
}
/**
* Increments the error audio count by one
*/
public void incrementErrorAudioCount()
{
mErrorAudioCount++;
}
}