package me.hao0.antares.server.event.core; import com.google.common.eventbus.AsyncEventBus; import com.google.common.eventbus.EventBus; import me.hao0.antares.common.log.Logs; import me.hao0.antares.common.util.Systems; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.Map; import java.util.concurrent.Executors; /** * The event dispatcher * Author: haolin * Email : haolin.h0@gmail.com */ @Component public class DefaultEventDispatcher implements EventDispatcher { @Autowired private ApplicationContext springContext; public final EventBus eventBus; public DefaultEventDispatcher() { this(Systems.cpuNum() + 1); } protected DefaultEventDispatcher(Integer threadCount) { eventBus = new AsyncEventBus(Executors.newFixedThreadPool(threadCount)); Logs.info("The event dispatcher has started successfully!"); } @PostConstruct public void init(){ Map<String, EventListener> listeners = springContext.getBeansOfType(EventListener.class); if (listeners != null && listeners.size() > 0){ for (Map.Entry<String, EventListener> listener : listeners.entrySet()){ Logs.info("The event dispatcher registered the listener({}).", listener); register(listener.getValue()); } } } @Override public void register(EventListener listener) { eventBus.register(listener); } @Override public void unRegister(EventListener listener) { eventBus.unregister(listener); } @Override public void publish(Event event) { eventBus.post(event); } }