package com.flexpoker.game.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.game.command.commands.AttemptToStartNewHandCommand;
import com.flexpoker.game.command.commands.CreateGameCommand;
import com.flexpoker.game.command.commands.IncrementBlindsCommand;
import com.flexpoker.game.command.commands.JoinGameCommand;
import com.flexpoker.game.command.framework.GameCommandType;
@Component("gameCommandReceiver")
public class InMemoryAsyncGameCommandReceiver implements
CommandReceiver<GameCommandType> {
private final CommandHandler<CreateGameCommand> createGameCommandHandler;
private final CommandHandler<JoinGameCommand> joinGameCommandHandler;
private final CommandHandler<AttemptToStartNewHandCommand> attemptToStartNewHandCommandHandler;
private final CommandHandler<IncrementBlindsCommand> incrementBlindsCommandHandler;
@Inject
public InMemoryAsyncGameCommandReceiver(
CommandHandler<CreateGameCommand> createGameCommandHandler,
CommandHandler<JoinGameCommand> joinGameCommandHandler,
CommandHandler<AttemptToStartNewHandCommand> attemptToStartNewHandCommandHandler,
CommandHandler<IncrementBlindsCommand> incrementBlindsCommandHandler) {
this.createGameCommandHandler = createGameCommandHandler;
this.joinGameCommandHandler = joinGameCommandHandler;
this.attemptToStartNewHandCommandHandler = attemptToStartNewHandCommandHandler;
this.incrementBlindsCommandHandler = incrementBlindsCommandHandler;
}
@Async
@Override
public void receive(Command<GameCommandType> command) {
switch (command.getType()) {
case CreateGame:
createGameCommandHandler.handle((CreateGameCommand) command);
break;
case JoinGame:
joinGameCommandHandler.handle((JoinGameCommand) command);
break;
case AttemptToStartNewHand:
attemptToStartNewHandCommandHandler
.handle((AttemptToStartNewHandCommand) command);
break;
case IncrementBlinds:
incrementBlindsCommandHandler.handle((IncrementBlindsCommand) command);
break;
default:
throw new IllegalArgumentException("Command Type cannot be handled: "
+ command.getType());
}
}
}