void Update()
    {
        try
        {
            if (listRecvStr.Count != 0)
            {
                //oldListRecStr = listRecvStr;
                //recOrNot = false;
                foreach (string recvFinal in listRecvStr)
                {
                    //print(recvFinal + count_plantSet.ToString());
                    JSONNode jData = JSON.Parse(recvFinal);
                    //print(jData);
                    string header = jData["header"];
                    if (header == "ps")
                    {
                        PlantSet ps = JsonUtility.FromJson <PlantSet>(recvFinal);
                        //PlantSet ps = JsonConvert.DeserializeObject<PlantSet>(recvFinal);
                        GameObject plantSetWant = GameObject.Find(ps.Name);
                        mpUI.GeneratePlantAnchor(ps.Name, ps.pos, ps.rotate, true);
                    }

                    else if (header == "pds")
                    {
                        GameObject singlePlant = FindSinglePlant(jData["singName"], jData["singId"]);
                        UpdateSingPlant(singlePlant, jData, true);
                    }

                    else if (header == "pds_sync")
                    {
                        GameObject singlePlant = FindSinglePlant(jData["singName"], jData["singId"]);
                        UpdateSingPlant(singlePlant, jData, false);
                    }

                    else if (header == "PN")
                    {
                        plantSetNum = int.Parse(jData["PlantNumber"]);
                    }

                    else if (header == "wa")
                    {
                        WorldAnchorTrans wat = JsonUtility.FromJson <WorldAnchorTrans>(recvFinal);
                        anchorData = wat.data;
                        Debug.Log("download anchor with tcp successfully");
                    }
                }
                listRecvStr = new List <string>();
            }
        }
        catch (Exception e)
        {
            print("Error happens here:" + e);
        }
    }
    public void SendWorlAnchor(WorldAnchorTrans w)
    {
        byte[] sendData    = new byte[81920];
        string senDataJson = JsonUtility.ToJson(w) + "<EOF>";

        //string senDataJson = JsonConvert.SerializeObject(w) + "<EOF>";
        //sendData = ObjectToByteArray(w);
        //string senDataJson = "{'header':'wa', 'spaceName':" + id +  ", 'data':" + w.ToString() + "}" + "<EOF>" ;
        sendData = Encoding.UTF8.GetBytes(senDataJson);

        int totalByteToSend = sendData.Length;
        int byteSend        = 0;

        Debug.Log("the total byte is:" + sendData.Length);
        while (byteSend < totalByteToSend)
        {
            byteSend += serverSocket.Send(sendData, byteSend, totalByteToSend - byteSend, SocketFlags.None);
        }

        //serverSocket.SendTo(sendData, sendData.Length, SocketFlags.None, ipEnd);
    }
    public void PressAndGenerate()
    {
        if (Choice == Selection.CreateNew)
        {
            //TextAsset asset = Resources.Load("data_demonstration") as TextAsset;
            //anchorData = asset.bytes;
            //WorldAnchorTrans wat = new WorldAnchorTrans
            //{
            //    header = "wa",
            //    spaceName = spaceId,
            //    data = anchorData
            //};
            //tCP.SendWorlAnchor(wat);

            TimeCost tc4 = new TimeCost("OFALL", Time.time.ToString() + "start generating the anchor");
            tCP.SocketSendByte(tc4);
            //GameObject parentanchor = GameObject.Find("anchor1");
            WorldAnchor wa1 = anchorObject1.AddComponent <WorldAnchor>();
            WorldAnchorTransferBatch watb = new WorldAnchorTransferBatch();
            watb.AddWorldAnchor(anchorObject1.name, wa1);
            WorldAnchor wa2 = anchorObject2.AddComponent <WorldAnchor>();
            watb.AddWorldAnchor(anchorObject2.name, wa2);
            TimeCost tc5 = new TimeCost("OFALL", Time.time.ToString() + "Generating anchor done");
            tCP.SocketSendByte(tc5);
            imgSet.SetActive(true);
            //tCP.InitSocket();

            exportedData = new byte[0];
            e            = new List <byte>();
            indicator.GetComponent <MeshRenderer>().material.color = Color.yellow;
            syncOrNot = true;
            TimeCost tc6 = new TimeCost("OFALL", Time.time.ToString() + "start serializing the anchor");
            tCP.SocketSendByte(tc6);
            WorldAnchorTransferBatch.ExportAsync(watb,
                                                 (data) =>
            {
                e.AddRange(data);
                exportedData = data;
            },
                                                 (reason) =>
            {
                if (reason == SerializationCompletionReason.Succeeded)
                {
                    WorldAnchorTrans wat = new WorldAnchorTrans
                    {
                        header    = "wa",
                        spaceName = spaceId,
                        data      = e.ToArray()
                    };
                    TimeCost tc7 = new TimeCost("OFALL", Time.time.ToString() + "start sending anchor data");
                    tCP.SocketSendByte(tc7);
                    tCP.SendWorlAnchor(wat);
                    //CreateNewAnchorInManager();
                    indicator.GetComponent <MeshRenderer>().material.color = Color.green;

                    syncOrNot = true;
                }
                else
                {
                    Debug.Log("failed to upload world anchor, please try agagin");
                    indicator.GetComponent <MeshRenderer>().material.color = Color.red;
                }
            });
        }
        else if (Choice == Selection.SycnDirectly)
        {
            //tCP.InitSocket();
            StartCoroutine(DownloadAnchor(spaceId));
        }
        else if (Choice == Selection.LocationSync)
        {
            SendMsg msgNeed = new SendMsg("NeedToSyncPlantSet");
            tCP.SocketSendByte(msgNeed);
        }

        else if (Choice == Selection.CreateNew_multi)
        {
            WorldAnchor wa1 = anchorObject1.AddComponent <WorldAnchor>();
            WorldAnchorTransferBatch watb = new WorldAnchorTransferBatch();
            watb.AddWorldAnchor(anchorObject1.name, wa1);
            WorldAnchor wa2 = anchorObject2.AddComponent <WorldAnchor>();
            watb.AddWorldAnchor(anchorObject2.name, wa2);
            WorldAnchor wa3   = anchorObject3.AddComponent <WorldAnchor>();
            WorldAnchor wa4   = anchorObject4.AddComponent <WorldAnchor>();
            WorldAnchor wa5   = anchorObject5.AddComponent <WorldAnchor>();
            WorldAnchor wa2_1 = anchorObject2_1.AddComponent <WorldAnchor>();
            WorldAnchor wa3_1 = anchorObject3_1.AddComponent <WorldAnchor>();
            imgSet.SetActive(true);
        }
        else if (Choice == Selection.Version1)
        {
            anchorObject1.SetActive(true);
            anchorObject2_1.SetActive(true);
            anchorObject3_1.SetActive(true);
        }
        else if (Choice == Selection.Version2)
        {
            anchorObject1.SetActive(true);
            anchorObject2.SetActive(true);
            anchorObject3.SetActive(true);
            anchorObject4.SetActive(true);
            anchorObject5.SetActive(true);
        }
    }