public UserStatsDataModel(IPreferenceSet prefs, IXmlStatsDataContainer dataContainer) { _updateTimer = new System.Timers.Timer(); _updateTimer.Elapsed += UpdateTimerElapsed; _prefs = prefs; _prefs.PreferenceChanged += (s, e) => { if (e.Preference == Preference.EnableUserStats) { ControlsVisible = _prefs.Get <bool>(Preference.EnableUserStats); if (ControlsVisible) { _dataContainer.GetEocXmlData(false); StartTimer(); } else { StopTimer(); } } }; _dataContainer = dataContainer; _dataContainer.XmlStatsDataChanged += delegate { AutoMapper.Mapper.Map(_dataContainer.XmlStatsData, this); OnPropertyChanged(null); }; // apply data container to the model ControlsVisible = _prefs.Get <bool>(Preference.EnableUserStats); if (ControlsVisible) { DateTime nextUpdateTime = _dataContainer.GetNextUpdateTime(); if (nextUpdateTime < DateTime.UtcNow) { _dataContainer.GetEocXmlData(false); } StartTimer(); } AutoMapper.Mapper.Map(_dataContainer.XmlStatsData, this); }
public UserStatsDataModel(IPreferenceSet prefs, IXmlStatsDataContainer dataContainer) { _updateTimer = new System.Timers.Timer(); _updateTimer.Elapsed += UpdateTimerElapsed; _prefs = prefs; _prefs.PreferenceChanged += (s, e) => { if (e.Preference == Preference.EnableUserStats) { ControlsVisible = _prefs.Get<bool>(Preference.EnableUserStats); if (ControlsVisible) { _dataContainer.GetEocXmlData(false); StartTimer(); } else { StopTimer(); } } }; _dataContainer = dataContainer; _dataContainer.XmlStatsDataChanged += delegate { AutoMapper.Mapper.Map(_dataContainer.XmlStatsData, this); OnPropertyChanged(null); }; // apply data container to the model ControlsVisible = _prefs.Get<bool>(Preference.EnableUserStats); if (ControlsVisible) { DateTime nextUpdateTime = _dataContainer.GetNextUpdateTime(); if (nextUpdateTime < DateTime.UtcNow) { _dataContainer.GetEocXmlData(false); } StartTimer(); } AutoMapper.Mapper.Map(_dataContainer.XmlStatsData, this); }
private void StartTimer() { DateTime nextUpdateTime = _dataContainer.GetNextUpdateTime(); if (nextUpdateTime < DateTime.UtcNow) { // if a recent update interval cannot be determined then default to 3 hours from now. _updateTimer.Interval = TimeSpan.FromHours(3).TotalMilliseconds; } else { // get the length of time from now until the next update STARTS TimeSpan nextUpdateInterval = nextUpdateTime.Subtract(DateTime.UtcNow); // now ADD a random number of minutes (15 to 30) to the interval to // allow time for the update to finish and also some staggering // between all HFM instances so the EOC servers aren't bombarded // all at the same time. nextUpdateInterval = nextUpdateInterval.Add(TimeSpan.FromMinutes(GetRandomMinutes())); double interval = nextUpdateInterval.TotalMilliseconds; // Check the value before setting it in the timer. The value must be positive and less than Int32.MaxValue. // Otherwise an exception is thrown when calling Start() on the timer. // Issue 276 - http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework/2006-10/msg00228.html if (interval > TimeSpan.FromMinutes(1).TotalMilliseconds&& interval < Int32.MaxValue) { _updateTimer.Interval = interval; } else { // if a recent update interval cannot be determined then default to 3 hours from now. _updateTimer.Interval = TimeSpan.FromHours(3).TotalMilliseconds; } } Logger.InfoFormat("Starting EOC Stats Update Timer Loop: {0} Minutes", Convert.ToInt32(TimeSpan.FromMilliseconds(_updateTimer.Interval).TotalMinutes)); _updateTimer.Start(); }