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); }
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"); } }