@Override
    protected void handleInboxItem(InboxItem inboxItem) {
        super.handleInboxItem(inboxItem);
        if (inboxItem.getMessage() instanceof TokenMessage) {
            //draw card(s)
            executeTurn();
        }
        if (inboxItem.getMessage() instanceof LeaderElectionMessage) {
            LeaderElectionMessage message = (LeaderElectionMessage) inboxItem.getMessage();
            switch (message.getLeaderElectionMessageType()) {
                case ASK_FOR_ROLL: {
                    //asked for roll
                    doRoll(inboxItem.getSender());
                    break;
                }
                case LEADER_ELECTED: {
                    //round starts again
                    initRound();
                    ownPlayer.setActive(true);
                    if (message.getValue() == ownEndpoint.getId()) {
                        isDealer = true;
                        logger.info("New Dealer");
                        //start round
                        //send token to left neighbour
                        sendToken(getPreviousPlayer());
                    } else {
                        logger.info("Player " + message.getValue() + " is new dealer.");
                    }
                    break;
                }
                case ROLLED: {
                    gatherRoll(inboxItem.getSender(), message);
                    break;
                }
            }
        }
        if (inboxItem.getMessage() instanceof StatusMessage) {
            handleStatusMessage((StatusMessage) inboxItem.getMessage());
        }
        if (inboxItem.getMessage() instanceof DealerMessage) {
            handleDealerMessage(inboxItem.getSender(), (DealerMessage) inboxItem.getMessage());
        }
    }