Esempio n. 1
0
        /// <summary>
        /// Looks for changes in underlying repository and updates all SettingsBase (registered with this SettingsManager) objects with changed values
        /// Respects all error handling settings;
        /// </summary>
        public void UpdateChangedSettings()
        {
            try
            {
                lock (SyncRoot)
                {
                    if (ReaderExecuting != null)
                    {
                        ReaderExecuting.Invoke(this, new EventArgs());
                    }
                    var now = Now();
                    var settingsFromRepo = Repository.ReadSettings(GetCategoriesToRead(), _lastRead).ToNonNullArray();
                    if (settingsFromRepo.Length == 0)
                    {
                        return;
                    }
                    foreach (SettingsBase settings in AllSettings.Values)
                    {
                        var category         = settings.Category;
                        var matchingSettings = settingsFromRepo.Where(s => s.Category == category);
                        SetProperties(settings, matchingSettings, ThrowPropertySetExceptionsOnPeriodicRead);
                    }
                    foreach (var f in settingsFromRepo.Where(s => s.Category == FlagsCategoryName))
                    {
                        if (SetFlag(f.Name, f.Value))
                        {
                            if (FlagChanged != null)
                            {
                                FlagChanged.Invoke(this, new PropertyChangedEventArgs(f.Name));
                            }
                        }
                    }

                    _lastRead = settingsFromRepo.Max(s => s.UpdatedAt);
                    //sets last read time to newest found setting
                    if (_lastRead > now) //last read time must not be greated than current time
                    {
                        _lastRead = now;
                    }
                }
            }
            catch (Exception ex)
            {
                _periodicReaderErrors.FlushOld(Now());
                if (PeriodicReaderError != null)
                {
                    var args = new RepeatingErrorEventArgs()
                    {
                        Exception   = ex,
                        IsRepeating = _periodicReaderErrors.Contains(ex.GetType().Name)
                    };
                    PeriodicReaderError.Invoke(this, args);
                }
                _periodicReaderErrors.Add(ex.GetType().Name);
            }
        }
Esempio n. 2
0
 public bool IsHandlerRegistered(EventHandler <FlagChangedEventArgs> handler)
 {
     return(FlagChanged != null && FlagChanged.GetInvocationList().Contains(handler));
 }