diff --git a/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java b/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java index 684d5b73..ff988b01 100644 --- a/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java +++ b/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java @@ -16,7 +16,7 @@ public class SimpleMessaging implements IMessaging { //TODO is poorly performace on concurrent load, use at least ReadWriteLock private ReadWriteLock rwLock = new ReentrantReadWriteLock(); - private List subscriptions = new ArrayList(); + private SubscriptionsStore subscriptions = new SubscriptionsStore(); private INotifier m_notifier; @@ -31,10 +31,8 @@ public class SimpleMessaging implements IMessaging { rwLock.readLock().lock(); try { - for (Subscription sub : subscriptions) { - if (sub.match(topic)) { - m_notifier.notify(sub.clientId, topic, defQos, message); - } + for (Subscription sub : subscriptions.matches(topic)) { + m_notifier.notify(sub.clientId, topic, defQos, message); } } finally { rwLock.readLock().unlock(); @@ -44,15 +42,11 @@ public class SimpleMessaging implements IMessaging { public void subscribe(String clientId, String topic, QOSType qos) { Subscription newSubscription = new Subscription(clientId, topic, qos); rwLock.writeLock().lock(); - if (subscriptions.contains(newSubscription)) { - rwLock.writeLock().unlock(); - return; - } subscriptions.add(newSubscription); rwLock.writeLock().unlock(); } - protected List getSubscriptions() { + protected SubscriptionsStore getSubscriptions() { return subscriptions; } } diff --git a/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessagingTest.java b/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessagingTest.java index 016a86c3..93a5ab98 100644 --- a/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessagingTest.java +++ b/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessagingTest.java @@ -1,12 +1,11 @@ package org.dna.mqtt.moquette.messaging.spi.impl; -import org.junit.Before; -import org.mockito.ArgumentCaptor; -import java.util.List; import org.dna.mqtt.moquette.messaging.spi.INotifier; import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType; -import org.junit.Test; import static org.junit.Assert.*; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; import static org.mockito.Mockito.*; /** @@ -43,17 +42,7 @@ public class SimpleMessagingTest { //Verify Subscription subscription = new Subscription(FAKE_CLIENT_ID, FAKE_TOPIC, QOSType.MOST_ONE); - assertEquals(1, countMatchingSubscriptions(messaging.getSubscriptions(), subscription)); - } - - private int countMatchingSubscriptions(List l, Subscription matchingSub) { - int count = 0; - for (Subscription s : l) { - if (s.equals(matchingSub)) { - count++; - } - } - return count; + assertEquals(1, messaging.getSubscriptions().size()); } @Test