/// <summary> /// Releases the unmanaged resources used by the <see cref="TimestampTest"/> object and optionally releases the managed resources. /// </summary> /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param> protected override void Dispose(bool disposing) { if (!m_disposed) { try { if (disposing) { // Dispose timestamp service. if (m_timestampService != null) { m_timestampService.ServiceProcessException -= m_timestampService_ServiceProcessException; m_timestampService.Dispose(); } m_timestampService = null; // Dispose purge timer. if (m_purgeTimer != null) { m_purgeTimer.Elapsed -= m_purgeTimer_Elapsed; m_purgeTimer.Dispose(); } m_purgeTimer = null; // Dispose warning timer. if (m_warningTimer != null) { m_warningTimer.Elapsed -= m_warningTimer_Elapsed; m_warningTimer.Dispose(); } m_warningTimer = null; // Dispose discarding adapter. if (m_discardingAdapter != null) { m_discardingAdapter.DiscardingMeasurements -= m_discardingAdapter_DiscardingMeasurements; m_discardingAdapter.Disposed -= m_discardingAdapter_Disposed; } m_discardingAdapter = null; } } finally { m_disposed = true; // Prevent duplicate dispose. base.Dispose(disposing); // Call base class Dispose(). } } }
/// <summary> /// Initializes <see cref="TimestampTest"/>. /// </summary> public override void Initialize() { base.Initialize(); string errorMessage = "{0} is missing from Settings - Example: concentratorName=TESTSTREAM"; Dictionary<string, string> settings = Settings; string setting; // Load optional parameters if (settings.TryGetValue("timeToPurge", out setting)) m_timeToPurge = Ticks.FromSeconds(double.Parse(setting)); if (settings.TryGetValue("warnInterval", out setting)) m_warnInterval = Ticks.FromSeconds(double.Parse(setting)); // Load required parameters string concentratorName; if (!settings.TryGetValue("concentratorName", out concentratorName)) throw new ArgumentException(string.Format(errorMessage, "concentratorName")); m_discardingAdapter = null; // Find the adapter whose name matches the specified concentratorName foreach (IAdapter adapter in Parent) { IActionAdapter concentrator = adapter as IActionAdapter; if (concentrator != null && string.Compare(adapter.Name, concentratorName, true) == 0) { m_discardingAdapter = concentrator; break; } } if (m_discardingAdapter == null) throw new ArgumentException(string.Format("Concentrator {0} not found.", concentratorName)); // Wait for associated adapter to initialize int timeout = m_discardingAdapter.InitializationTimeout; m_discardingAdapter.WaitForInitialize(timeout); if (!m_discardingAdapter.Initialized) throw new TimeoutException(string.Format("Timeout waiting for concentrator {0} to initialize.", concentratorName)); // Attach to adapter's discarding measurements and disposed events m_discardingAdapter.DiscardingMeasurements += m_discardingAdapter_DiscardingMeasurements; m_discardingAdapter.Disposed += m_discardingAdapter_Disposed; m_purgeTimer.Interval = m_timeToPurge.ToMilliseconds(); m_purgeTimer.Elapsed += m_purgeTimer_Elapsed; m_warningTimer.Interval = m_warnInterval.ToMilliseconds(); m_warningTimer.Elapsed += m_warningTimer_Elapsed; m_timestampService = new TimestampService(this); m_timestampService.ServiceProcessException += m_timestampService_ServiceProcessException; m_timestampService.SettingsCategory = base.Name + m_timestampService.SettingsCategory; m_timestampService.Initialize(); }