package plugins.CENO.Bridge.Signaling;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
import freenet.support.Logger;
public class ChannelManager {
private List<Channel> channelList;
private static volatile ChannelManager instance;
private ChannelManager() {
channelList = new ArrayList<Channel>();
}
public static ChannelManager getInstance() {
if (instance == null) {
synchronized(ChannelManager.class) {
instance = new ChannelManager();
}
}
return instance;
}
public Channel getChannel(String signalSSK) {
for (Channel channel : channelList) {
if (channel.getInsertSSK().equals(signalSSK))
return channel;
}
return null;
}
public void addChannel(Channel channel) throws MalformedURLException {
if (channel != null) {
if (!channelList.contains(channel)) {
channelList.add(channel);
subscribeToChannel(channel);
}
}
}
public int addChannels(List<Channel> extraChannelsList) {
int counter = 0;
if (extraChannelsList != null) {
for (Channel channel : extraChannelsList) {
try {
addChannel(channel);
counter++;
} catch (MalformedURLException e) {
Logger.normal(this, "Could not add channel with insert SSK: " + channel.getInsertSSK());
}
}
}
return counter;
}
public void addChannel(String signalSSK) {
Channel channel;
try {
channel = new Channel(signalSSK);
addChannel(channel);
} catch (MalformedURLException e) {
Logger.warning(this, "Could not subscribe to SSK during channel creation for key: " + signalSSK);
return;
}
}
public boolean removeChannel(Channel channel) {
if (channel != null && channelList.contains(channel)) {
channelList.remove(channel);
return true;
}
return false;
}
public List<Channel> getAllChannels() {
return channelList;
}
private void subscribeToChannel(Channel channel) throws MalformedURLException {
channel.subscribeToChannelUpdates();
}
}