Makes interceptor notify handler asynchronously

This commit is contained in:
Wagner Macedo
2015-08-02 12:40:11 -03:00
parent 58f6191a8e
commit 67ed07549e
2 changed files with 45 additions and 5 deletions
@@ -21,6 +21,9 @@ import org.eclipse.moquette.proto.messages.ConnectMessage;
import org.eclipse.moquette.proto.messages.PublishMessage;
import org.eclipse.moquette.spi.impl.subscriptions.Subscription;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* An interceptor that execute the interception tasks asynchronously.
*
@@ -28,33 +31,67 @@ import org.eclipse.moquette.spi.impl.subscriptions.Subscription;
*/
final class BrokerInterceptor implements Interceptor {
private final InterceptHandler handler;
private final ExecutorService executor;
BrokerInterceptor(InterceptHandler handler) {
this.handler = handler;
executor = Executors.newFixedThreadPool(1);
}
/**
* Shutdown graciously the executor service
*/
void stop() {
executor.shutdown();
}
@Override
public void notifyClientConnected(final ConnectMessage msg) {
handler.onConnect(msg.readOnlyClone());
executor.execute(new Runnable() {
@Override
public void run() {
handler.onConnect(msg.readOnlyClone());
}
});
}
@Override
public void notifyClientDisconnected(final String clientID) {
handler.onDisconnect(clientID);
executor.execute(new Runnable() {
@Override
public void run() {
handler.onDisconnect(clientID);
}
});
}
@Override
public void notifyTopicPublished(final PublishMessage msg) {
handler.onPublish(msg.readOnlyClone());
executor.execute(new Runnable() {
@Override
public void run() {
handler.onPublish(msg.readOnlyClone());
}
});
}
@Override
public void notifyTopicSubscribed(final Subscription sub) {
handler.onSubscribe(sub.clone());
executor.execute(new Runnable() {
@Override
public void run() {
handler.onSubscribe(sub.clone());
}
});
}
@Override
public void notifyTopicUnsubscribed(final Subscription sub) {
handler.onUnsubscribe(sub.clone());
executor.execute(new Runnable() {
@Override
public void run() {
handler.onUnsubscribe(sub.clone());
}
});
}
}
@@ -290,6 +290,9 @@ public class SimpleMessaging implements IMessaging, EventHandler<ValueEvent> {
private void processStop() {
LOG.debug("processStop invoked");
if (interceptor != null) {
((BrokerInterceptor) interceptor).stop();
}
m_storageService.close();
LOG.debug("subscription tree {}", subscriptions.dumpTree());
// m_eventProcessor.halt();