private void playerMove(Player player) {
        IOController ioController = ioControllerMap.get(player);
        Table table = gameState.getTables().get(player);
        DiceSet diceSet = gameState.getDiceSet();



        boolean ready = false;
        currentRerolls = 0;
        diceSet.unlockAll();
        diceSet.roll();

        while (!ready) {
            updateGameControllers();

            Set<Command> availableCommands = table.getAvailableCommands();
            availableCommands.addAll(handledCommands);
            Command command = ioController.read(availableCommands);

            try {
                ((FigureCommand) command).setDiceSet(gameState.getDiceSet());
            }
            catch (ClassCastException e) { /* nothing happened */ }

            CommandResponse response = CommandResponses.COMMAND_UNKNOWN;
            if (table.canHandle(command)) {
                response = table.doHandle(command);
                ready = true;
            }
            if (this.canHandle(command)) {
                response = this.doHandle(command);
            }

            ioController.callback(response);

            if (!running) {
                /* terminate received */
                ready = true;
            }
        }
    }