All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.gitlab.virtualcry.reactor.bus.EventBus Maven / Gradle / Ivy

There is a newer version: 3.2.2
Show newest version
package cn.gitlab.virtualcry.reactor.bus;

import cn.gitlab.virtualcry.reactor.bus.env.Environment;
import cn.gitlab.virtualcry.reactor.bus.processor.EventRouter;
import cn.gitlab.virtualcry.reactor.bus.subscriber.EventSubscriber;
import cn.gitlab.virtualcry.reactor.bus.subscriber.SubscriberID;

import java.util.List;

/**
 * A reactor is an event gateway that allows other components to register {@link Event} {@link EventSubscriber}s
 * that can subsequently be notified of events.
 *
 * @author VirtualCry
 */
public class EventBus implements Bus {

    private final EventRouter               eventRouter;


    private EventBus(Environment env) {
        this.eventRouter = new EventRouter(env);
    }


    @Override
    public  Bus on(Class eventType, EventSubscriber subscriber) {
        this.eventRouter.route(eventType)
                .subscribe(subscriber);
        return this;
    }

    @Override
    public  Bus on(Class eventType, List> subscribers) {
        this.eventRouter.route(eventType)
                .subscribe(subscribers);
        return this;
    }

    @Override
    public Bus unSubscribe(Class eventType, SubscriberID subscriberID) {
        this.eventRouter.route(eventType)
                .onCancel(subscriberID);
        return this;
    }

    @Override
    public  Bus publish(T event) {
        this.eventRouter.publish(event);
        return this;
    }


    /**
     * Create a new {@link EventBus} using the given {@link Environment}
     *
     * @param env The {@link Environment} to use.
     * @return  A new {@link EventBus}
     */
    public static EventBus create(Environment env) {
        return new EventBus(env);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy