package ameba.event; import ameba.container.event.ShutdownEvent; /** * <p>SystemEventBus class.</p> * * @author icode */ public class SystemEventBus { private static EventBus EVENT_BUS; static { init(); } private SystemEventBus() { } private static void init() { EVENT_BUS = EventBus.createMix(); EVENT_BUS.subscribe(ShutdownEvent.class, event -> { synchronized (SystemEventBus.class) { EVENT_BUS = null; } }); } private static EventBus getEventBus() { if (EVENT_BUS == null) { synchronized (SystemEventBus.class) { if (EVENT_BUS == null) { init(); } } } return EVENT_BUS; } /** * <p>subscribe.</p> * * @param event a {@link java.lang.Class} object. * @param listener a {@link ameba.event.Listener} object. * @param <E> a E object. */ public static <E extends Event> void subscribe(Class<E> event, final Listener<E> listener) { getEventBus().subscribe(event, listener); } /** * <p>subscribe.</p> * * @param object a {@link java.lang.Object} object. * @since 0.1.6e */ public static void subscribe(Object object) { getEventBus().subscribe(object); } /** * <p>unsubscribe.</p> * * @param event a {@link java.lang.Class} object. * @param listener a {@link ameba.event.Listener} object. * @param <E> a E object. */ public static <E extends Event> void unsubscribe(Class<E> event, final Listener<E> listener) { getEventBus().unsubscribe(event, listener); } /** * <p>publish.</p> * * @param event a {@link ameba.event.Event} object. */ public static void publish(Event event) { getEventBus().publish(event); } }