public static GetChangesByKnowledgeResult FromPayload(JObject payload)
            {
                string synchronizationId = payload[nameof(SynchronizationId)].Value <string>();
                Dictionary <string, object> customInfo = payload[nameof(CustomInfo)].ToObject <Dictionary <string, object> >();
                PayloadAction payloadAction            = (PayloadAction)Enum.Parse(typeof(PayloadAction), payload[nameof(PayloadAction)].Value <string>());
                GetChangesByKnowledgeResult result     = new GetChangesByKnowledgeResult(payloadAction, synchronizationId, customInfo);

                result.Changes    = payload[nameof(Changes)].ToObject <JArray>();
                result.LogChanges = payload[nameof(LogChanges)].ToObject <List <SyncLog.SyncLogData> >();
                return(result);
            }
Exemple #2
0
        internal void GetChangesByKnowledge(GetChangesByKnowledgeParameter parameter, ref GetChangesByKnowledgeResult result)
        {
            if (parameter == null)
            {
                throw new NullReferenceException(nameof(parameter));
            }
            result = new GetChangesByKnowledgeResult(parameter.PayloadAction, parameter.SynchronizationId, parameter.CustomInfo);

            parameter.Log.Add($"Get Changes By Knowledge");
            parameter.Log.Add($"Local Knowledge Count: {parameter.LocalKnowledgeInfos.Count}");
            for (int i = 0; i < parameter.LocalKnowledgeInfos.Count; i++)
            {
                parameter.Log.Add($"{i + 1}. {parameter.LocalKnowledgeInfos[i].ToString()}");
            }
            parameter.Log.Add($"Remote Knowledge Count: {parameter.RemoteKnowledgeInfos.Count}");
            for (int i = 0; i < parameter.RemoteKnowledgeInfos.Count; i++)
            {
                parameter.Log.Add($"{i + 1}. {parameter.RemoteKnowledgeInfos[i].ToString()}");
            }
            if (parameter.LocalKnowledgeInfos.Where(w => w.IsLocal).Count() != 1)
            {
                throw new SyncEngineConstraintException($"{nameof(parameter.LocalKnowledgeInfos)} must have 1 IsLocal property equals to true");
            }
            if (parameter.RemoteKnowledgeInfos.Where(w => w.IsLocal).Count() != 1)
            {
                throw new SyncEngineConstraintException($"{nameof(parameter.RemoteKnowledgeInfos)} must have 1 IsLocal property equals to true");
            }
            KnowledgeInfo localInfo = parameter.LocalKnowledgeInfos.Where(w => w.IsLocal).First();

            parameter.Log.Add($"SyncTypes Count: {SyncConfiguration.SyncTypes.Count}");
            for (int i = 0; i < SyncConfiguration.SyncTypes.Count; i++)
            {
                Type syncType = SyncConfiguration.SyncTypes[i];
                parameter.Log.Add($"Processing Type: {syncType.Name} ({i + 1} of {SyncConfiguration.SyncTypes.Count})");
                (JObject typeChanges, int typeChangesCount, List <SyncLog.SyncLogData> typeLogChanges) = GetTypeChangesByKnowledge(syncType, localInfo.DatabaseInstanceId, parameter.RemoteKnowledgeInfos, parameter.SynchronizationId, parameter.CustomInfo);
                parameter.Log.Add($"Type Changes Count: {typeChangesCount}");
                if (typeChangesCount != 0 && typeChanges != null)
                {
                    result.Changes.Add(typeChanges);
                }
                result.LogChanges.AddRange(typeLogChanges);
                parameter.Log.Add($"Type: {syncType.Name} Processed");
            }
        }