package io.cattle.platform.eventing.memory; import io.cattle.platform.eventing.EventListener; import io.cattle.platform.eventing.impl.AbstractThreadPoolingEventService; import io.cattle.platform.eventing.model.Event; import java.io.IOException; import java.util.List; import java.util.concurrent.ExecutorService; import javax.inject.Inject; import javax.inject.Named; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.util.concurrent.SettableFuture; public class InMemoryEventService extends AbstractThreadPoolingEventService implements io.cattle.platform.util.type.Named { private static final Logger log = LoggerFactory.getLogger(InMemoryEventService.class); @Inject @Named("EventExecutorService") ExecutorService executorService; @Override protected boolean doPublish(final String name, final Event event, final String eventString) throws IOException { executorService.execute(new Runnable() { @Override public void run() { /* * Don't send events we know there are no listeners for. This * emulates the behavior of endpoints only getting what they've * subscribed to. */ List<EventListener> listeners = getEventListeners(event); if (listeners != null && listeners.size() > 0) { onEvent(null, name, eventString); } } }); return true; } @Override protected void doSubscribe(String eventName, SettableFuture<?> future) { log.debug("Subscribing to [{}]", eventName); future.set(null); } @Override protected void doUnsubscribe(String eventName) { log.debug("Unsubscribing from [{}]", eventName); } @Override protected void disconnect() { } @Override public String getName() { return "EventService"; } }