* @param mes   the messsage
     */
    private void handleMONOPOLYPICK(StringConnection c, SOCMonopolyPick mes)
    {
        if (c != null)
        {
            SOCGame ga = gameList.getGameData(mes.getGame());

            if (ga != null)
            {
                ga.takeMonitor();

                try
                {
                    final String gaName = ga.getName();
                    if (checkTurn(c, ga))
                    {
                        if (ga.canDoMonopolyAction())
                        {
                            int[] monoPicks = ga.doMonopolyAction(mes.getResource());

                            final String monoPlayerName = (String) c.getData();
                            final String resName
                                = " " + SOCResourceConstants.resName(mes.getResource()) + ".";
                            String message = monoPlayerName + " monopolized" + resName;

                            gameList.takeMonitorForGame(gaName);
                            messageToGameExcept(gaName, c, new SOCGameTextMsg(gaName, SERVERNAME, message), false);

                            /**
                             * just send all the player's resource counts for the
                             * monopolized resource
                             */
                            for (int i = 0; i < ga.maxPlayers; i++)
                            {
                                /**
                                 * Note: This only works if SOCPlayerElement.CLAY == SOCResourceConstants.CLAY
                                 */
                                messageToGameWithMon(gaName, new SOCPlayerElement(gaName, i, SOCPlayerElement.SET, mes.getResource(), ga.getPlayer(i).getResources().getAmount(mes.getResource())));
                            }
                            gameList.releaseMonitorForGame(gaName);

                            /**
                             * now that monitor is released, notify the
                             * victim(s) of resource amounts taken,
                             * and tell the player how many they won.
                             */
                            int monoTotal = 0;
                            for (int i = 0; i < ga.maxPlayers; i++)
                            {
                                int picked = monoPicks[i];
                                if (picked == 0)
                                    continue;
                                monoTotal += picked;
                                String viName = ga.getPlayer(i).getName();
                                StringConnection viCon = getConnection(viName);
                                if (viCon != null)
                                    messageToPlayer(viCon, gaName,
                                        monoPlayerName + "'s Monopoly took your " + picked + resName);
                            }

                            messageToPlayer(c, gaName, "You monopolized " + monoTotal + resName);
                            sendGameState(ga);
                        }
                        else
                        {
                            messageToPlayer(c, gaName, "You can't do a Monopoly pick now.");
                        }
                    }
                    else
                    {
                        messageToPlayer(c, gaName, "It's not your turn.");
                    }
                }
                catch (Exception e)
                {
                    D.ebugPrintln("Exception caught - " + e);
                    e.printStackTrace();
                }

                ga.releaseMonitor();
            }
        }
    }