package fi.iki.mkuokkanen.seda.queue; import com.lmax.disruptor.EventHandler; import com.lmax.disruptor.dsl.Disruptor; import fi.iki.mkuokkanen.seda.api.session.SessionManager; import fi.iki.mkuokkanen.seda.queue.event.Message; import fi.iki.mkuokkanen.seda.queue.eventhandler.LoggerEventHandler; import fi.iki.mkuokkanen.seda.queue.eventhandler.OpOutEventHandler; import fi.iki.mkuokkanen.seda.queue.translator.StoreToMessageTranslator; import javax.inject.Inject; import java.util.Map; /** * Outbound queue, passes messages from store to clients. * * @author mkuokkanen */ class QueueOutImpl extends AbstractDisruptor implements QueueOut { // private static Logger logger = // LoggerFactory.getLogger(DisruptorOut.class); private final SessionManager sessionManager; private final StoreToMessageTranslator translator; /** * Constructor * * @param sessionManager */ @Inject QueueOutImpl(SessionManager sessionManager, StoreToMessageTranslator translator) { this.sessionManager = sessionManager; this.translator = translator; } /** * Creates eventhandlers and sets their processing order. * * @param disruptor */ @SuppressWarnings("unchecked") @Override void setupEventHandlers(Disruptor<Message> disruptor) { EventHandler<Message> log = new LoggerEventHandler("OutLog1"); EventHandler<Message> opOut = new OpOutEventHandler(sessionManager); disruptor .handleEventsWith(log) .handleEventsWith(opOut); } @Override public void writeBroadcastToQueue(Map<String, String> data) { getRingBuffer().publishEvent(translator, data); } }