public override void SendAction()
    {
        Ag.LogString("WasUniformUpdate :: SendAction ...   Started ...  ");

        if (partOfAll == null)
        {
            partOfAll = new List <AmUniform> ();

            for (int k = 0; k < User.arrUniform.Count; k++)
            {
                if (k == 0 || User.arrUniform [k].mustUpdate)
                {
                    partOfAll.Add(User.arrUniform [k]);
                }
            }
        }

        SendStr = "";
        SendStr = SendStr.AddCodeKeyKKOID(User, 320);
        SendStr = SendStr.AddKeyValue("formatVersion", 1);
        string unifArr = "";

        int sendNum = partOfAll.Count > 8 ? 8 : partOfAll.Count;

        Ag.LogDouble("  Update  >>> ....      Remain >>> " + sendNum);

        for (int i = 0; i < sendNum; i++)
        {
            AmUniform uObj = partOfAll [i];
            //Ag.LogString (" Must Update ?? " + uObj.mustUpdate);
            //if (uObj.mustUpdate || i == 0)
            unifArr += uObj.ToJsonStr() + " , ";
        }

        partOfAll.RemoveRange(0, sendNum);

        unifArr = unifArr.Substring(0, unifArr.Length - 2);
        unifArr = unifArr.AddSqreBrakt();
        SendStr = SendStr.AddArray("arrUniform", unifArr, false);

        SendStr = SendStr.AddParen();

        postAction += () => {
            Ag.LogString("WasUniformUpdate :: postAction " + Result.result);

            if (partOfAll.Count > 0)
            {
                Ag.LogIntenseWord("   Update Again ....      Remain >>> " + partOfAll.Count);
                SendAction();
            }

            messageAction(Result.result);
            Ag.LogString(" postAction ");
        };

        SendAndRciv();
    }