public KeysSyncInfo GetAllKeysSyncInfo() { var info = new KeysSyncInfo(); Tenant tenant = GetTenant(); info.TenantId = tenant.TenantId; try { var tenantKeys = Memory.ConfigurationStore.AllKeyValues.FindAll(g => g.TenantId.CompareTo(repoTenantId) == 0 && g.AppName.CompareTo(string.Empty) == 0).ToList(); tenantKeys = tenantKeys.OrderBy(k => k.Key).ToList(); var keysJson = JsonConvert.SerializeObject(tenantKeys); info.Keys = JsonConvert.DeserializeObject <List <StoreKeyValue> >(keysJson); StringBuilder signature = new StringBuilder(); foreach (var k in info.Keys) { signature.Append(k.Key + "_" + k.Value + "_"); } var sigStr = signature.ToString(); if (!string.IsNullOrEmpty(sigStr)) { info.MD5Hash = sigStr.GetMd5Hash(); } else { info.MD5Hash = string.Empty; } return(info); } catch (Exception err) { Console.WriteLine("GetAllKeysSyncInfo ERROR - ", err.Message); } return(null); }
public bool StartSyncProcess(Tenant tenant, List <DiscoveryPeer> peers, AppsSyncInfo apps, KeysSyncInfo keys, int seconds) { PersistencyInfo synchInfo = null; // save sync state infos for tenant lock (SyncInfos){ synchInfo = SyncInfos.SingleOrDefault(s => s.SynchTenant.TenantId.CompareTo(tenant.TenantId) == 0); if (synchInfo == null) { synchInfo = new PersistencyInfo(); synchInfo.SynchTenant = tenant; SyncInfos.Add(synchInfo); } } synchInfo.SynchStarted = true; synchInfo.LastSynchStarterId = Program.InstanceConfig.ServerInstanceID; synchInfo.SyncStart = DateTime.Now; synchInfo.SyncEnd = DateTime.Now.AddSeconds(seconds); synchInfo.Apps = JsonConvert.DeserializeObject <AllApplications>(JsonConvert.SerializeObject(apps.Apps)); synchInfo.KeyValues = JsonConvert.DeserializeObject <List <StoreKeyValue> >(JsonConvert.SerializeObject(keys.Keys)); synchInfo.Peers = JsonConvert.DeserializeObject <List <DiscoveryPeer> >(JsonConvert.SerializeObject(peers)); synchInfo.PeerSyncResponses = new List <PeerSyncResponse>(); synchInfo.AppsMD5 = apps.MD5Hash; synchInfo.KeysMD5 = keys.MD5Hash; // send MQTT PERSISTENCY_SYNC message if (!string.IsNullOrEmpty(synchInfo.AppsMD5)) { var syncMessage = new MQTTPersistencySyncAppsMessageContent() { TenantId = tenant.TenantId, PeerId = Program.InstanceConfig.ServerInstanceID, AppsMd5Hash = synchInfo.AppsMD5 }; var toIds = new List <string>(); toIds.Add("ALL"); var jsonMessage = JsonConvert.SerializeObject(syncMessage); jsonMessage = jsonMessage.Replace("\"", "'"); var mqttMessage = new MQTTMessage() { FromInstanceId = Program.InstanceConfig.ServerInstanceID, ToInstancesIds = toIds, Type = "PERSISTENCY_SYNC_APPS", Message = jsonMessage }; Program.mqttService.SendMQTTMessageToAll(synchInfo.SynchTenant.TenantId, mqttMessage); } if (!string.IsNullOrEmpty(synchInfo.KeysMD5)) { var syncMessage = new MQTTPersistencySyncKeysMessageContent() { TenantId = tenant.TenantId, PeerId = Program.InstanceConfig.ServerInstanceID, KeysMd5Hash = synchInfo.KeysMD5 }; var toIds = new List <string>(); toIds.Add("ALL"); var jsonMessage = JsonConvert.SerializeObject(syncMessage); jsonMessage = jsonMessage.Replace("\"", "'"); var mqttMessage = new MQTTMessage() { FromInstanceId = Program.InstanceConfig.ServerInstanceID, ToInstancesIds = toIds, Type = "PERSISTENCY_SYNC_KEYS", Message = jsonMessage }; Program.mqttService.SendMQTTMessageToAll(synchInfo.SynchTenant.TenantId, mqttMessage); } return(true); }