/// <summary> /// Обработчик события - регистрация события сигнализации от 'TecView' /// </summary> /// <param name="obj">Объект, зарегистрировавший событие сигнализации</param> /// <param name="ev">Аргумент события сигнализации</param> private void onEventReg(TecViewAlarm.AlarmTecViewEventArgs ev) { INDEX_ACTION iAction = m_dictAlarmObject.Registred(ref ev); StatesMachine state = StatesMachine.Unknown; if (iAction == INDEX_ACTION.ERROR) { throw new Exception(@"AdminAlarm::OnEventReg_TecView () - ..."); } else { switch (iAction) { case INDEX_ACTION.NEW: state = StatesMachine.Insert; break; case INDEX_ACTION.RETRY: state = StatesMachine.Retry; break; default: // неизвестное/необрабатываемое днйствие break; } push(new object[] { new object [] { state , ev } } ); } }
public ALARM_OBJECT(TecViewAlarm.AlarmTecViewEventArgs ev) : this(INDEX_STATES_ALARM.REGISTRING) { Console.WriteLine(@"ALARM_OBJECT::ctor (id_comp=" + ev.m_id_comp + @", dtReg=" + ev.m_dtRegistred.GetValueOrDefault().ToString(@"dd.MM.yyyy HH:mm:ss.fffffff", CultureInfo.InvariantCulture) + @") - _state=" + _state.ToString() + @"..."); init(ev.m_dtRegistred.GetValueOrDefault()); }
/// <summary> /// Зарегистрировать событие в режиме "выполнение_приложения" /// </summary> /// <param name="ev">Аргумент события</param> /// <returns>Результат регистрации (-1 - ошибка, 0 - ничего_не_делать, 1 - новый_объект, 2 - повторное_событие)</returns> public INDEX_ACTION Registred(ref TecViewAlarm.AlarmTecViewEventArgs ev) { INDEX_ACTION iRes = INDEX_ACTION.NOTHING; ALARM_OBJECT alarmObj = null; List <KeyValuePair <int, DateTime> > listToRemoveKeys; lock (this) { try { alarmObj = //find(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault()) find(ev.m_id_comp) ; if (alarmObj == null) { //Только, если объект события сигнализации НЕ создан //Сообщить для сохранения в БД iRes = INDEX_ACTION.NEW; } else //Только, если объект события сигнализации создан //Проверить состояние if (alarmObj.CONFIRMED == true) { // если подтверждено - проверить период между датой/временем регистрации события сигнализации и датой/временем его подтверждения if (alarmObj.HISTORY == true) { //Сообщить для сохранения в БД для регистрации нового события сигнализаций для этого же компонента ТЭЦ iRes = INDEX_ACTION.NEW; } else { ; } } else if (alarmObj.RETRY == true) { ev.m_dtRegistred = alarmObj.Retry(ev.m_dtRegistred.GetValueOrDefault()); iRes = INDEX_ACTION.RETRY; } else { ; } if (iRes == INDEX_ACTION.NEW) { //Перед добавлением объекта очистить словарь от "устаревших" объектов //Подготовить список со сложными ключами для удалениями listToRemoveKeys = new List <KeyValuePair <int, DateTime> >(); foreach (KeyValuePair <int, DateTime> cKey in _dictAlarmObject.Keys) { //Проверить признак "устаревания" if ((cKey.Value - DateTime.UtcNow).TotalHours > DEPTH_HOUR_OBJECTALRM) { listToRemoveKeys.Add(cKey); } else { ; } } //Удалить объекты со сложными ключами в списке foreach (KeyValuePair <int, DateTime> cKey in listToRemoveKeys) { _dictAlarmObject.Remove(cKey); } // создать объект события сигнализации _dictAlarmObject.Add(new KeyValuePair <int, DateTime>(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault()), new ALARM_OBJECT(ev)); } else { ; } Logging.Logg().Debug(@"DictAlarmObject::Register (id=" + ev.m_id_comp + @", dtReg=" + ev.m_dtRegistred.GetValueOrDefault().ToString() + @") - общее_кол-во_событий: " + _dictAlarmObject.Count , Logging.INDEX_MESSAGE.NOT_SET); } catch (Exception e) { iRes = INDEX_ACTION.ERROR; Logging.Logg().Exception(e, @"DictAlarmObject::Registred (" + ev.GetType().Name + @") - ...", Logging.INDEX_MESSAGE.NOT_SET); } } return(iRes); }
public ALARM_OBJECT(TecViewAlarm.AlarmTecViewEventArgs ev) : this(INDEX_STATES_ALARM.REGISTRING) { init(ev.m_dtRegistred.GetValueOrDefault()); }