package com.kurento.kmf.connector;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import com.kurento.kmf.jsonrpcconnector.Session;
public class SubscriptionsManager {
private final ConcurrentMap<String, Session> sessionsBySubsId = new ConcurrentHashMap<>();
private final Multimap<String, Session> sessionsByObjAndType = Multimaps
.synchronizedSetMultimap(HashMultimap.<String, Session> create());
public void removeSession(Session session) {
removeSessionFromIterator(sessionsByObjAndType.entries().iterator(),
session);
removeSessionFromIterator(sessionsBySubsId.entrySet().iterator(),
session);
}
private void removeSessionFromIterator(Iterator<Entry<String, Session>> it,
Session session) {
while (it.hasNext()) {
Entry<String, Session> value = it.next();
if (value.getValue() == session) {
it.remove();
}
}
}
public void addSubscription(String subscriptionId, String objectAndType,
Session session) {
sessionsBySubsId.put(subscriptionId, session);
sessionsByObjAndType.put(objectAndType, session);
}
public Collection<Session> getSessionsByObjAndType(String objectAndType) {
return sessionsByObjAndType.get(objectAndType);
}
public Collection<Session> getSessionsBySubscription(String subscriptionId) {
Session session = sessionsBySubsId.get(subscriptionId);
if (session == null) {
return Collections.emptyList();
} else {
return Arrays.asList(session);
}
}
}