void ProcessClickForCardAction(Player player, Game game)
    {
        // if the game is not in the right phase log error and return
        if (game.GamePhase != GamePhase.LOGISTICS_PLANNING)
        {
            ServerLogError("Received a click for card message in the wrong game phase Player=" + player.Name);
            return;
        }

        // does the player have a click remaining
        if (player.Clicks < 1)
        {
            ServerLogError("Received a click for card message from a player with no clicks remaining Player=" + player.Name);
            return;
        }

        // spend the click
        ChangeClicks(player, -1);

        // draw card for player
        PlayableCard card = player.Deck.Draw();

        player.Hand.Add(card);

        // send it to the client
        var cardMsg = new MessageTypes.DrawnCardMessage();

        cardMsg.CardCodename = card.CardCodename.ToString();
        cardMsg.cardId       = card.CardId;
        NetworkServer.SendToClient(player.ConnectionId, (short)MessageTypes.MessageType.DRAWN_CARD, cardMsg);

        ServerLog(string.Format("{0} clicks for a card", player.Name), game);
        // send the action to the opponent for their game log
        //SendGameLogToPlayer(game.GetOpponent(player), string.Format("{0} clicks to draw", player.Name));
    }
    private void DrawAndSendStartingHand(Game game, Player player)
    {
        player.DrawStartingHand();

        // send starting hand
        for (int i = 0; i < player.Hand.Count; i++)
        {
            var cardMsg = new MessageTypes.DrawnCardMessage();
            var card    = player.Hand[i];
            ServerLog(string.Format("{0} card{1}:{2}", player.Name, i, card.CardName), game);
            cardMsg.CardCodename = card.CardCodename.ToString();
            cardMsg.cardId       = card.CardId;
            NetworkServer.SendToClient(player.ConnectionId, (short)MessageTypes.MessageType.DRAWN_CARD, cardMsg);
        }
    }