package com.flexpoker.table.command.eventpublishers; import javax.inject.Inject; import org.springframework.stereotype.Component; import com.flexpoker.framework.event.EventPublisher; import com.flexpoker.framework.event.subscriber.EventSubscriber; import com.flexpoker.framework.processmanager.ProcessManager; import com.flexpoker.table.command.events.ActionOnChangedEvent; import com.flexpoker.table.command.events.AutoMoveHandForwardEvent; import com.flexpoker.table.command.events.HandCompletedEvent; import com.flexpoker.table.command.framework.TableEvent; @Component public class InMemoryAsyncTableEventPublisher implements EventPublisher<TableEvent> { private final EventSubscriber<TableEvent> tableEventSubscriber; private final ProcessManager<ActionOnChangedEvent> actionOnCountdownProcessManager; private final ProcessManager<HandCompletedEvent> attemptToStartNewHandForExistingTableProcessManager; private final ProcessManager<AutoMoveHandForwardEvent> autoMoveHandForwardProcessManager; @Inject public InMemoryAsyncTableEventPublisher( EventSubscriber<TableEvent> tableEventSubscriber, ProcessManager<ActionOnChangedEvent> actionOnCountdownProcessManager, ProcessManager<HandCompletedEvent> attemptToStartNewHandForExistingTableProcessManager, ProcessManager<AutoMoveHandForwardEvent> autoMoveHandForwardProcessManager) { this.tableEventSubscriber = tableEventSubscriber; this.actionOnCountdownProcessManager = actionOnCountdownProcessManager; this.attemptToStartNewHandForExistingTableProcessManager = attemptToStartNewHandForExistingTableProcessManager; this.autoMoveHandForwardProcessManager = autoMoveHandForwardProcessManager; } @Override public void publish(TableEvent event) { tableEventSubscriber.receive(event); if (event.getClass() == ActionOnChangedEvent.class) { actionOnCountdownProcessManager.handle((ActionOnChangedEvent) event); } else if (event.getClass() == HandCompletedEvent.class) { attemptToStartNewHandForExistingTableProcessManager .handle((HandCompletedEvent) event); } else if (event.getClass() == AutoMoveHandForwardEvent.class) { autoMoveHandForwardProcessManager.handle((AutoMoveHandForwardEvent) event); } } }