Architechtural refactory, moved subscription out of tree and into db store

This commit is contained in:
andsel
2015-12-06 11:43:29 +01:00
parent 490c6a763d
commit 9ce9a6597f
15 changed files with 260 additions and 250 deletions
@@ -20,8 +20,10 @@ import static io.moquette.commons.Constants.*;
import io.moquette.server.IntegrationUtils;
import io.moquette.server.config.IConfig;
import io.moquette.server.config.MemoryConfig;
import io.moquette.spi.ClientSession;
import io.moquette.spi.IMessagesStore;
import io.moquette.spi.ISessionsStore;
import io.moquette.spi.ISessionsStore.ClientTopicCouple;
import io.moquette.proto.messages.AbstractMessage;
import io.moquette.spi.impl.subscriptions.Subscription;
import org.junit.After;
@@ -67,15 +69,16 @@ public class MapDBPersistentStoreTest {
@Test
public void overridingSubscriptions() {
ClientSession session1 = m_sessionsStore.createNewSession("FAKE_CLI_ID_1", true);
Subscription oldSubscription = new Subscription("FAKE_CLI_ID_1", "/topic", AbstractMessage.QOSType.MOST_ONE, false);
m_sessionsStore.addNewSubscription(oldSubscription);
session1.subscribe("/topic", oldSubscription);
Subscription overrindingSubscription = new Subscription("FAKE_CLI_ID_1", "/topic", AbstractMessage.QOSType.EXACTLY_ONCE, false);
m_sessionsStore.addNewSubscription(overrindingSubscription);
session1.subscribe("/topic", overrindingSubscription);
//Verify
List<Subscription> subscriptions = m_sessionsStore.listAllSubscriptions();
List<ClientTopicCouple> subscriptions = m_sessionsStore.listAllSubscriptions();
assertEquals(1, subscriptions.size());
Subscription sub = subscriptions.get(0);
Subscription sub = m_sessionsStore.getSubscription(subscriptions.get(0));
assertEquals(overrindingSubscription.getRequestedQos(), sub.getRequestedQos());
}
@@ -86,10 +86,9 @@ public class MemorySessionStore implements ISessionsStore {
}
Set<Subscription> subs = m_persistentSubscriptions.get(clientID);
if (!subs.contains(newSubscription)) {
subs.add(newSubscription);
m_persistentSubscriptions.put(clientID, subs);
}
subs.remove(newSubscription); //same topic and clientID
subs.add(newSubscription);
m_persistentSubscriptions.put(clientID, subs);
}
@Override
@@ -97,11 +96,6 @@ public class MemorySessionStore implements ISessionsStore {
m_persistentSubscriptions.remove(clientID);
}
@Override
public void updateSubscriptions(String clientID, Set<Subscription> subscriptions) {
m_persistentSubscriptions.put(clientID, subscriptions);
}
@Override
public boolean contains(String clientID) {
return m_persistentSubscriptions.containsKey(clientID);
@@ -135,14 +129,30 @@ public class MemorySessionStore implements ISessionsStore {
}
@Override
public List<Subscription> listAllSubscriptions() {
List<Subscription> allSubscriptions = new ArrayList<>();
public List<ClientTopicCouple> listAllSubscriptions() {
List<ClientTopicCouple> allSubscriptions = new ArrayList<>();
for (Map.Entry<String, Set<Subscription>> entry : m_persistentSubscriptions.entrySet()) {
allSubscriptions.addAll(entry.getValue());
for (Subscription sub : entry.getValue()) {
allSubscriptions.add(new ClientTopicCouple(sub.getClientId(), sub.getTopicFilter()));
}
}
return allSubscriptions;
}
@Override
public Subscription getSubscription(ClientTopicCouple couple) {
Set<Subscription> subscriptions = m_persistentSubscriptions.get(couple.clientID);
if (subscriptions == null || subscriptions.isEmpty()) {
return null;
}
for (Subscription sub : subscriptions) {
if (sub.getTopicFilter().equals(couple.topicFilter)) {
return sub;
}
}
return null;
}
@Override
public void activate(String clientID) {
activationHelper(clientID, true);