public void handleRequest( ReplyServer replyServer, ByteChannel channel, byte[] requestBytes ) throws IOException {
        String request = new String( requestBytes );
        StringTokenizer st = new StringTokenizer( request );
        String command = st.nextToken();
        
        switch (command.toLowerCase()) {
            case "load":
                Card card = Track.loadCard(st.nextToken());
                downloadCard( replyServer, channel, card );
                break;
            case "download":
                DownloadCommand downloadCommand = new DownloadCommand(st);
                downloadCard( replyServer, channel, downloadCommand.getTrack().getCurrentCard());
                break;
            case "bet":
                BetCommand betCommand = new BetCommand(st);
                betCommand.getPool().addBet(betCommand.getHorseNum(), betCommand.getAmount());
                if (betCommand.forCurrentWinPool() && betCommand.getTrack().hasEnoughBets()
                    && _stopWatch.getElapsedTimeInSeconds() >= ODDS_UPDATE_INTERVAL) {
                    displayCurrentOdds(betCommand);
                }
                break;
            case "display":
                DisplayCommand displayCommand = new DisplayCommand(st);
                displayCommand.getTrack().setCurrentRace(displayCommand.getRaceNum());
                _stopWatch.resetElapsedTime();
                displayLineOdds(displayCommand);
                break;
            case "results":
                ResultsCommand resultsCommand = new ResultsCommand(st);
                displayResults(resultsCommand);
        }
    }