Skip to content

Commit

Permalink
Update to MBassador 1.2.4.
Browse files Browse the repository at this point in the history
This release contains some performance improvements compared
to the version we were using.

Error handlers are now passed in at construction time, so
there was a small bit of refactoring required.
  • Loading branch information
csmith committed Feb 13, 2016
1 parent 4434220 commit 87452ec
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 43 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Expand Up @@ -94,7 +94,7 @@ subprojects {
compile group: 'com.squareup.dagger', name: 'dagger', version: '1.2.1'
compile group: 'com.google.guava', name:'guava', version: '18.0'

compile group: 'net.engio', name: 'mbassador', version: '1.2.0'
compile group: 'net.engio', name: 'mbassador', version: '1.2.4'
compile group: 'de.odysseus.juel', name: 'juel-api', version: '2.2.7'
compile group: 'de.odysseus.juel', name: 'juel-impl', version: '2.2.7'
compile group: 'de.odysseus.juel', name: 'juel-spi', version: '2.2.7'
Expand Down
28 changes: 27 additions & 1 deletion common/src/com/dmdirc/parser/common/BaseParser.java
Expand Up @@ -22,6 +22,7 @@

package com.dmdirc.parser.common;

import com.dmdirc.parser.events.ParserErrorEvent;
import com.dmdirc.parser.interfaces.ChannelInfo;
import com.dmdirc.parser.interfaces.ClientInfo;

Expand All @@ -31,8 +32,11 @@
import java.net.SocketAddress;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Date;
import java.util.List;

import net.engio.mbassy.bus.error.PublicationError;

/**
* Implements common base functionality for parsers.
* <p>
Expand All @@ -41,6 +45,8 @@
*/
public abstract class BaseParser extends ThreadedParser {

private final Object errorHandlerLock = new Object();

/** The URI that this parser was constructed for. */
private final URI uri;

Expand Down Expand Up @@ -76,7 +82,27 @@ public abstract class BaseParser extends ThreadedParser {
public BaseParser(final URI uri) {
this.uri = uri;

callbackManager = new CallbackManager(this);
callbackManager = new CallbackManager(this::handleCallbackError);
}

@SuppressWarnings({
"ThrowableResultOfMethodCallIgnored",
"CallToPrintStackTrace",
"UseOfSystemOutOrSystemErr"
})
private void handleCallbackError(final PublicationError e) {
if (Thread.holdsLock(errorHandlerLock)) {
// ABORT ABORT ABORT - we're publishing an error on the same thread we just tried
// to publish an error on. Something in the error reporting pipeline must be
// breaking, so don't try adding any more errors.
System.err.println("ERROR: Error when reporting error");
e.getCause().printStackTrace();
return;
}

synchronized (errorHandlerLock) {
callbackManager.publish(new ParserErrorEvent(this, new Date(), e.getCause()));
}
}

@Override
Expand Down
46 changes: 5 additions & 41 deletions common/src/com/dmdirc/parser/common/CallbackManager.java
Expand Up @@ -22,60 +22,24 @@

package com.dmdirc.parser.common;

import com.dmdirc.parser.events.ParserErrorEvent;
import com.dmdirc.parser.events.ParserEvent;
import com.dmdirc.parser.interfaces.Parser;

import java.util.Date;

import net.engio.mbassy.bus.MBassador;
import net.engio.mbassy.bus.config.BusConfiguration;
import net.engio.mbassy.bus.config.Feature;
import net.engio.mbassy.bus.error.IPublicationErrorHandler;

/**
* Parser Callback Manager.
* Manages adding/removing/calling callbacks.
*/
public class CallbackManager extends MBassador<ParserEvent> {

private final Object errorHandlerLock = new Object();
private final Parser parser;

public CallbackManager(final Parser parser) {
public CallbackManager(final IPublicationErrorHandler errorHandler) {
super(new BusConfiguration().addFeature(Feature.SyncPubSub.Default())
.addFeature(Feature.AsynchronousHandlerInvocation.Default(1, 1)).addFeature(
Feature.AsynchronousMessageDispatch.Default()
.setNumberOfMessageDispatchers(1)));
this.parser = parser;
setupErrorHandler();
}

@SuppressWarnings("TypeMayBeWeakened")
public CallbackManager(final BusConfiguration configuration, final Parser parser) {
super(configuration);
setupErrorHandler();
this.parser = parser;
.addFeature(Feature.AsynchronousHandlerInvocation.Default(1, 1))
.addFeature(Feature.AsynchronousMessageDispatch.Default()
.setNumberOfMessageDispatchers(1)));
}

@SuppressWarnings({
"ThrowableResultOfMethodCallIgnored",
"CallToPrintStackTrace",
"UseOfSystemOutOrSystemErr"
})
private void setupErrorHandler() {
addErrorHandler(e -> {
if (Thread.holdsLock(errorHandlerLock)) {
// ABORT ABORT ABORT - we're publishing an error on the same thread we just tried
// to publish an error on. Something in the error reporting pipeline must be
// breaking, so don't try adding any more errors.
System.err.println("ERROR: Error when reporting error");
e.getCause().printStackTrace();
return;
}

synchronized (errorHandlerLock) {
publish(new ParserErrorEvent(parser, new Date(), e.getCause()));
}
});
}
}

0 comments on commit 87452ec

Please sign in to comment.