Exemple #1
0
    public void InsertWithID(FIRBaseData created)
    {
        var type = created.GetType();
        var dic  = getDic(type);
        int id   = IncreaseIDCnt(type);

        created.uid = id;
        dic.Add(id, created);
    }
Exemple #2
0
    protected void ProcessResult(JObject resData)
    {
        var updated = resData["updated"] as JObject;
        var deleted = resData["deleted"] as JObject;

        if (updated != null)
        {
            var serializeSettings = new JsonSerializerSettings();
            serializeSettings.ContractResolver = new PrivateSetterContractResolver();

            var serializer = JsonSerializer.Create(serializeSettings);
            foreach (JProperty classData in updated.Properties())
            {
                var type = dataTypeContainer.TypeDic[classData.Name];
                var arr  = classData.Value as JArray;
                foreach (JObject itemData in arr)
                {
                    FIRBaseData temp = null;
                    int         uid  = itemData["uid"].Value <int>();
                    if (targetContainer.ContainsID(type, uid) == false)
                    {
                        temp = targetContainer.Create(type);
                        Debug.Log($"created class={type.Name} uid={uid}");
                    }
                    else
                    {
                        temp = targetContainer.GetByID(type, uid);
                        Debug.Log($"updated class={type.Name} uid={uid}");
                    }

                    //Notify change!
                    var afterData = (FIRBaseData)itemData.ToObject(type);
                    targetContainer.notifier.OnNext(Tuple.Create <FIRBaseData, FIRBaseData>(temp, afterData));

                    //					JsonConvert.PopulateObject(itemData.ToString(),temp,serializeSettings);
                    //Update Item
                    using (var reader = itemData.CreateReader()){
                        serializer.Populate(reader, temp);
                    }
                    targetContainer.afterNotifier.OnNext(temp);
                }
            }
        }
        if (deleted != null)
        {
            foreach (JProperty classData in deleted.Properties())
            {
                var type = dataTypeContainer.TypeDic[classData.Name];
                var arr  = classData.Value as JArray;
//				Debug.Log("Trying="+type.Name);
                foreach (JObject itemData in arr)
                {
                    int uid = itemData["uid"].Value <int>();
                    if (targetContainer.ContainsID(type, uid) == true)
                    {
                        targetContainer.Dispose(type, uid);
                        Debug.Log($"Deleted class={type.Name} uid={uid}");
                    }
                    else
                    {
                        throw new System.Exception($"try to delete not exist class={type.Name} uid={uid}");
                    }
                }
            }
        }
        targetContainer.totalAfterNotifier.OnNext(Unit.Default);
    }