package com.flexpoker.table.command.commandreceivers; import javax.inject.Inject; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import com.flexpoker.framework.command.Command; import com.flexpoker.framework.command.CommandHandler; import com.flexpoker.framework.command.CommandReceiver; import com.flexpoker.table.command.commands.AddPlayerCommand; import com.flexpoker.table.command.commands.AutoMoveHandForwardCommand; import com.flexpoker.table.command.commands.CallCommand; import com.flexpoker.table.command.commands.CheckCommand; import com.flexpoker.table.command.commands.CreateTableCommand; import com.flexpoker.table.command.commands.ExpireActionOnTimerCommand; import com.flexpoker.table.command.commands.FoldCommand; import com.flexpoker.table.command.commands.PauseCommand; import com.flexpoker.table.command.commands.RaiseCommand; import com.flexpoker.table.command.commands.RemovePlayerCommand; import com.flexpoker.table.command.commands.ResumeCommand; import com.flexpoker.table.command.commands.StartNewHandForExistingTableCommand; import com.flexpoker.table.command.commands.StartNewHandForNewGameCommand; import com.flexpoker.table.command.commands.TickActionOnTimerCommand; import com.flexpoker.table.command.framework.TableCommandType; @Component("tableCommandReceiver") public class InMemoryAsyncTableCommandReceiver implements CommandReceiver<TableCommandType> { private final CommandHandler<CreateTableCommand> createTableCommandHandler; private final CommandHandler<StartNewHandForNewGameCommand> startNewHandForNewGameCommandHandler; private final CommandHandler<StartNewHandForExistingTableCommand> startNewHandForExistingTableCommandHandler; private final CommandHandler<CheckCommand> checkCommandHandler; private final CommandHandler<CallCommand> callCommandHandler; private final CommandHandler<FoldCommand> foldCommandHandler; private final CommandHandler<RaiseCommand> raiseCommandHandler; private final CommandHandler<ExpireActionOnTimerCommand> expireActionOnTimerCommandHandler; private final CommandHandler<TickActionOnTimerCommand> tickActionOnTimerCommandHandler; private final CommandHandler<PauseCommand> pauseCommandHandler; private final CommandHandler<ResumeCommand> resumeCommandHandler; private final CommandHandler<AddPlayerCommand> addPlayerCommandHandler; private final CommandHandler<RemovePlayerCommand> removePlayerCommandHandler; private final CommandHandler<AutoMoveHandForwardCommand> autoMoveHandForwardCommandHandler; @Inject public InMemoryAsyncTableCommandReceiver( CommandHandler<CreateTableCommand> createTableCommandHandler, CommandHandler<StartNewHandForNewGameCommand> startNewHandForNewGameCommandHandler, CommandHandler<StartNewHandForExistingTableCommand> startNewHandForExistingTableCommandHandler, CommandHandler<CheckCommand> checkCommandHandler, CommandHandler<CallCommand> callCommandHandler, CommandHandler<FoldCommand> foldCommandHandler, CommandHandler<RaiseCommand> raiseCommandHandler, CommandHandler<ExpireActionOnTimerCommand> expireActionOnTimerCommandHandler, CommandHandler<TickActionOnTimerCommand> tickActionOnTimerCommandHandler, CommandHandler<PauseCommand> pauseCommandHandler, CommandHandler<ResumeCommand> resumeCommandHandler, CommandHandler<AddPlayerCommand> addPlayerCommandHandler, CommandHandler<RemovePlayerCommand> removePlayerCommandHandler, CommandHandler<AutoMoveHandForwardCommand> autoMoveHandForwardCommandHandler) { this.createTableCommandHandler = createTableCommandHandler; this.startNewHandForNewGameCommandHandler = startNewHandForNewGameCommandHandler; this.startNewHandForExistingTableCommandHandler = startNewHandForExistingTableCommandHandler; this.checkCommandHandler = checkCommandHandler; this.callCommandHandler = callCommandHandler; this.foldCommandHandler = foldCommandHandler; this.raiseCommandHandler = raiseCommandHandler; this.expireActionOnTimerCommandHandler = expireActionOnTimerCommandHandler; this.tickActionOnTimerCommandHandler = tickActionOnTimerCommandHandler; this.pauseCommandHandler = pauseCommandHandler; this.resumeCommandHandler = resumeCommandHandler; this.addPlayerCommandHandler = addPlayerCommandHandler; this.removePlayerCommandHandler = removePlayerCommandHandler; this.autoMoveHandForwardCommandHandler = autoMoveHandForwardCommandHandler; } @Async @Override public void receive(Command<TableCommandType> command) { switch (command.getType()) { case CreateTable: createTableCommandHandler.handle((CreateTableCommand) command); break; case StartNewHandForNewGame: startNewHandForNewGameCommandHandler .handle((StartNewHandForNewGameCommand) command); break; case StartNewHandForExistingTable: startNewHandForExistingTableCommandHandler .handle((StartNewHandForExistingTableCommand) command); break; case Call: callCommandHandler.handle((CallCommand) command); break; case Check: checkCommandHandler.handle((CheckCommand) command); break; case Fold: foldCommandHandler.handle((FoldCommand) command); break; case Raise: raiseCommandHandler.handle((RaiseCommand) command); break; case ExpireActionOnTimer: expireActionOnTimerCommandHandler .handle((ExpireActionOnTimerCommand) command); break; case TickActionOnTimer: tickActionOnTimerCommandHandler .handle((TickActionOnTimerCommand) command); break; case AddPlayer: addPlayerCommandHandler.handle((AddPlayerCommand) command); break; case Pause: pauseCommandHandler.handle((PauseCommand) command); break; case RemovePlayer: removePlayerCommandHandler.handle((RemovePlayerCommand) command); break; case Resume: resumeCommandHandler.handle((ResumeCommand) command); break; case AutoMoveHandForward: autoMoveHandForwardCommandHandler.handle((AutoMoveHandForwardCommand) command); break; default: throw new IllegalArgumentException( "Command Type cannot be handled: " + command.getType()); } } }