public void onMessage(Application.Request message) {
        System.out.println(message);

        if (Requests.QUIT.equals(message)) {
            dispatch(Events.SHUTDOWN);
        }

        if (Requests.AddPlayer.class.isInstance(message)) {
            final Requests.AddPlayer add = Requests.AddPlayer.class.cast(message);
            Schema.Player player = provisionalFactory.create(add.name);
            playerRepository.add(player);
        }

        if (Requests.Pick.class.isInstance(message)) {
            final Requests.Pick pick = Requests.Pick.class.cast(message);

            Predicate<Schema.Player> matchPlayer = new Predicate<Schema.Player>() {
                public boolean apply(Schema.Player input) {
                    if (input.bio.name.contains(pick.query)) {
                        return true;
                    }

                    for(Map.Entry<String,String> id : input.id.entrySet()) {
                        if (id.getValue().contains(pick.query)) {
                            return true;
                        }
                    }

                    return false;
                }
            } ;

            Iterable<Schema.Player> match = Iterables.filter(playerRepository.getPlayers(), matchPlayer);
            List<Schema.Player> players = Lists.newArrayList(match);

            if (players.isEmpty()) {
                dispatch(new Events.NoMatch(pick.query));
            } else {
                if (1 == players.size()) {
                    Schema.Player player = players.get(0);
                    String playerName = player.bio.name;
                    if (selectedFilter.apply(player)) {
                        dispatch(new Events.AlreadyTaken(playerName));
                    } else {
                        select(player);
                        dispatch(new Events.DraftUpdate<Schema.Player>(draft));
                    }
                } else {
                    dispatch(new Events.AmbiguousPlayer(pick.query,players));
                }
            }
        }
    }