コード例 #1
0
        public AppsSyncInfo GetTenantSyncInfo()
        {
            var info = new AppsSyncInfo();

            Tenant tenant = GetTenant();

            info.TenantId = tenant.TenantId;

            try
            {
                var tenantApps = ServicesRuntime.AllApplications.Applications.FindAll(app => app.TenantId.CompareTo(repoTenantId) == 0).ToList();
                tenantApps = tenantApps.OrderBy(app => app.Name).ToList();

                var AllTenantApps = new AllApplications()
                {
                    Applications  = tenantApps,
                    VersionsDelta = ServicesRuntime.AllApplications.VersionsDelta,
                    AppsHashCode  = string.Empty
                };

                var appsJson = JsonConvert.SerializeObject(AllTenantApps);
                info.Apps = JsonConvert.DeserializeObject <AllApplications>(appsJson);

                info.Apps.Applications = info.Apps.Applications;

                StringBuilder signature = new StringBuilder();

                foreach (var app in info.Apps.Applications)
                {
                    signature.Append(app.Name + "_");

                    var instances = app.Instances.OrderBy(i => i.InstanceId).ToList();
                    foreach (var inst in instances)
                    {
                        signature.Append(inst.InstanceId + "_" + inst.Status + "_" + inst.OverriddenStatus + "_");
                    }
                }

                var sigStr = signature.ToString();

                if (!string.IsNullOrEmpty(sigStr))
                {
                    info.MD5Hash = sigStr.GetMd5Hash();
                }
                else
                {
                    info.MD5Hash = string.Empty;
                }

                return(info);
            }
            catch (Exception err)
            {
                Console.WriteLine("GetTenantSyncInfo ERROR - ", err.Message);
            }

            return(null);
        }
コード例 #2
0
        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);
        }