/// <summary>
 /// Applies a custom alarm alert for the given alarm.
 /// </summary>
 /// <param name="alarm">Alarm.</param>
 /// <param name="alertMode">alarm alert. Null allowed.</param>
 public void SetAlertModeForAlarm(IAlarm alarm, IAlarmAlert alertMode)
 {
     if (__alertMapping.ContainsKey(alarm))
     {
         var alert = __alertMapping[alarm];
         alert.Stop();
         __firingAlerts.Remove(alert);
     }
     __alertMapping[alarm] = alertMode;
 }
        /// <summary>
        /// The function that is called when a registered alarm is triggered.
        /// </summary>
        /// <param name="alarm">Alarm.</param>
        private void FireAlarmAlerts(IAlarm alarm)
        {
            // Contension should never happen.
            lock (this) {
                IAlarmAlert alert = null;

                if (__alertMapping.ContainsKey(alarm))
                {
                    alert = __alertMapping[alarm];
                    alert.Stop();
                }
                else
                {
                    alert = alertFactory(this, alarm);
                    __alertMapping[alarm] = alert;
                }

                __firingAlerts.Add(alert);
                alert.Start();
            }
        }