void getPuke(JsonObject data)
    {
        whosTurn = 1;
        //isReadyUidText = "Already:game start";
        //isReadyUidText = "Already," + "whosTurn: " + mapIndex2[whosTurn];
        isReadyUidText = "当前出牌者:" + mapIndex2[whosTurn];

        //Debug.Log("onStartGame----------");
        string   tmp   = data.ToString();
        JsonData jdtmp = JsonMapper.ToObject(tmp);

        string   tmp2   = jdtmp["arrayPuke"].ToJson();
        JsonData jdtmp2 = JsonMapper.ToObject(tmp2);

        string   userIndex = "u" + index.ToString();
        JsonData jdtmpU1   = JsonMapper.ToObject(jdtmp2[userIndex].ToJson());

        /**
         * 这里需要对服务端随机发过来的牌进行排序,然后再显示
         */
        Card[] cardsTmp = new Card[jdtmpU1.Count];

        for (int i = 0; i < jdtmpU1.Count; i++)
        {
            string numStr = jdtmpU1[i].ToString();
            int    numInt = int.Parse(numStr);
            cardsTmp[i] = new Card(numInt);
            // if(!userCardNumber.Contains(numInt))
            //userCardNumber.Add(numInt);
        }
        CardsRules.SortCards(cardsTmp, cardsTmp.Length);

        for (int i = 0; i < jdtmpU1.Count; i++)
        {
            userCardNumber.Add(cardsTmp[i].GetIntVal);
        }


        foreach (int val in userCardNumber)
        {
            if (!hashMap.ContainsKey(val))
            {
                hashMap.Add(val, false);
            }
        }

        lastIndexTextContent = "就绪";
        isFapai          = true;
        userCardNumberGO = new ArrayList();
        GameState        = 0;

        // 每个玩家对应的剩余扑克牌数
        index_CardsCnt.Add(1, 17);
        index_CardsCnt.Add(2, 17);
        index_CardsCnt.Add(3, 17);
    }
    // 出牌按钮的点击事件
    void Btn_OutCards()
    {
        if (!isGameStart())
        {
            return;
        }

        if (whosTurn != index)
        {
            //Debug.Log("还未轮到自己出牌");
            GameObject newTip = Instantiate(tipPrefab);
            newTip.transform.FindChild("Text").GetComponent <Text>().text = "还未轮到自己出牌!";
            newTip.transform.parent = mycanvas.transform;
            newTip.GetComponent <RectTransform>().localPosition = new Vector3(0, 0, 0);
            Destroy(newTip, 2.0f);

            return;
        }
        //whosTurn = getNextIndex(whosTurn);// 改变下一个出牌者
        //isReadyUidText = "Already." + "whosTurn: " + mapIndex2[whosTurn];

        ArrayList deleteObj = new ArrayList();

        foreach (GameObject obj in userCardNumberGO)
        {
            string strVal = obj.transform.FindChild("Text").gameObject.GetComponent <Text>().text;
            int    val    = int.Parse(strVal);
            bool   flag   = hashMap[val];
            if (flag == true)
            {
                deleteObj.Add(obj);

                //Destroy(obj);
                //userCardNumber.Remove(val);
                //userCardNumberGO.Remove(obj);

                //GameObject t2 = (GameObject)Instantiate(msgPrefab);
                //t2.transform.FindChild("Text").gameObject.GetComponent<Text>().text = val.ToString();
                //t2.transform.FindChild("Image").gameObject.GetComponent<Image>().GetComponent<Image>().overrideSprite =
                //    Resources.Load("puke_prefabs/" + val.ToString(), typeof(Sprite)) as Sprite;
                //t2.transform.SetParent(Scroll_View_cards_lastOut.transform.FindChild("Viewport").FindChild("Content").transform);
            }
        }

        Card[] cards = new Card[deleteObj.Count];
        int    i     = 0;

        //ArrayList deleteCardsNum = new ArrayList();
        // deleteCards.Clear();
        foreach (GameObject obj in deleteObj)
        {
            string strVal = obj.transform.FindChild("Text").gameObject.GetComponent <Text>().text;
            //deleteCards.Add(strVal);
            //deleteCardsNum.Add(strVal);

            Card c = new Card(int.Parse(strVal));
            cards[i++] = c;
        }
        CardsRules.SortCards(cards, cards.Length);
        CardsType type2;

        if (!CardsRules.PopEnable(cards, out type2)) // 出牌不合理,或者没有出牌(点击pass按钮),都是无效操作
        {
            deleteCards.Clear();

            GameObject newTip = Instantiate(tipPrefab);
            newTip.transform.FindChild("Text").GetComponent <Text>().text = "出牌不合理!";
            newTip.transform.parent = mycanvas.transform;
            newTip.GetComponent <RectTransform>().localPosition = new Vector3(0, 0, 0);
            Destroy(newTip, 2.0f);

            return;
        }
        // lastIndex == index ,随便出
        if (lastIndexTextContent == "就绪" || int.Parse(lastIndexTextContent) == index)
        {
        }
        else // 出的牌 必须大于上一个玩家的牌,才能出,否则不能出牌
        {
            // cards 1,上(上)一个玩家出的牌
            int    ii = 0;
            Card[] c1 = new Card[deleteCards.Count];
            foreach (string val in deleteCards)
            {
                c1[ii++] = new Card(int.Parse(val));
            }
            CardsRules.SortCards(c1, deleteCards.Count);
            // cards 2 就是 cards(当前要出的牌)
            CardsType type1;
            CardsRules.PopEnable(c1, out type1);

            // 不合理的话,弹框提醒,并退出
            if (!PlayCard.isCanOutCard(c1, cards, type1, type2))
            {
                GameObject newTip = Instantiate(tipPrefab);
                newTip.transform.FindChild("Text").GetComponent <Text>().text = "出的牌不够大!";
                newTip.transform.parent = mycanvas.transform;
                newTip.GetComponent <RectTransform>().localPosition = new Vector3(0, 0, 0);
                Destroy(newTip, 2.0f);

                return;
            }
        }

        ArrayList deleteCardsNum = new ArrayList();

        deleteCards.Clear();
        for (int j = 0; j < i; j++)
        {
            string tmp = cards[j].GetIntVal.ToString();
            deleteCards.Add(tmp);
            deleteCardsNum.Add(tmp);
        }

        if (deleteCardsNum.Count == userCardNumberGO.Count)
        {
            // TODO 发送游戏结束的消息
            //isReadyUidText = "Game Over, Start new Game";
            JsonObject messageOver = new JsonObject();
            messageOver.Add("uid", userName);
            messageOver.Add("rid", roomid);
            messageOver.Add("index", index);
            pclient.request("chat.chatHandler.over", messageOver, (data) =>
            {
                Debug.Log("游戏结束");
            });
            return; // 结束后直接return,下面的出牌消息直接不发送
            //
        }
        // 给服务发送出牌的消息
        JsonObject message = new JsonObject();

        message.Add("uid", userName);
        message.Add("rid", roomid);
        message.Add("index", index);
        message.Add("delete_cards", deleteCardsNum);
        pclient.request("chat.chatHandler.chupai", message, (data) =>
        {
            Debug.Log("出牌");
        });
    }