public bool StopSyncProcess(Tenant tenant) { PersistencyInfo synchInfo = null; lock (SyncInfos) { synchInfo = SyncInfos.SingleOrDefault(s => s.SynchTenant.TenantId.CompareTo(tenant.TenantId) == 0); } if (synchInfo != null) { synchInfo.SynchStarted = false; synchInfo.LastSynchStarterId = string.Empty; synchInfo.SyncEnd = DateTime.Now; synchInfo.Peers = new List <DiscoveryPeer>(); synchInfo.PeerSyncResponses = new List <PeerSyncResponse>(); return(true); } return(false); }
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); }