package org.peerbox.events;
import net.engio.mbassy.bus.MBassador;
import net.engio.mbassy.bus.config.BusConfiguration;
import net.engio.mbassy.bus.config.Feature;
import com.google.inject.Singleton;
/**
* The message bus enables event delivery following the publish-subscribe pattern.
*
* - Messages:
* Messages must implement the interface {@link IMessage}.
*
* - Subscribers:
* Subscribers must be registered in advance by calling {@link #subscribe(Object)}.
* Furthermore, subscribers should implement handler methods accepting a specific message type
* as parameter. Handlers must be annotated with @Handler ({@link net.engio.mbassy.listener.Handler}.
*
* - Publishers:
* Publishers can publish messages implementing {@link IMessage} by
* calling {@link #publish(IMessage)} (synchronous delivery).
*
* @author albrecht
*
*/
@Singleton
public class MessageBus extends MBassador<IMessage> {
public MessageBus() {
super(createBusConfiguration());
}
private static BusConfiguration createBusConfiguration() {
BusConfiguration config = new BusConfiguration();
// synchronous dispatching of events
config.addFeature(Feature.SyncPubSub.Default());
// asynchronous dispatching of events
config.addFeature(Feature.AsynchronousHandlerInvocation.Default());
config.addFeature(Feature.AsynchronousMessageDispatch.Default());
return config;
}
}