private ITEM_SRC addGroupSignals(int iSrc) { ITEM_SRC itemRes = new GROUP_SIGNALS_SRC(); //(itemSrc as GROUP_SIGNALS_SRC).m_iAutoStart = bool.Parse(GetSecValueOfKey(secGroup, @"AUTO_START")) == true ? 1 : 0; //(itemSrc as GROUP_SIGNALS_SRC).m_mode = bool.Parse(GetSecValueOfKey(secGroup, @"CUR_INTERVAL_STATE")) == true ? MODE_WORK.CUR_INTERVAL : MODE_WORK.COSTUMIZE; //if (Int32.TryParse(GetSecValueOfKey(secGroup, @"CURINTERVAL_PERIODLOCAL"), out (itemSrc as GROUP_SIGNALS_SRC).m_arWorkIntervals[(int)MODE_WORK.CUR_INTERVAL].m_iInterval) == false) // (itemSrc as GROUP_SIGNALS_SRC).m_arWorkIntervals[(int)MODE_WORK.CUR_INTERVAL].m_iInterval = -1; //else // ; //parseWorkInterval(GetSecValueOfKey(secGroup, @"COSTUMIZE_VALUE"), ref (itemSrc as GROUP_SIGNALS_SRC).m_arWorkIntervals[(int)MODE_WORK.COSTUMIZE]); m_arListGroupValues[iSrc].m_listGroupSgnlsSrc.Add(itemRes as GROUP_SIGNALS_SRC); return(itemRes); }
/// <summary> /// Инициализация формул для группы сигналов /// </summary> /// <param name="item">Объект группы сигналов</param> /// <param name="throwMsgDeatail">Детализация сообщения (идентификаторы группы сигналов) при возникновении исключения</param> private void initGroupSignalsFormula(GROUP_SIGNALS_SRC item,string throwMsgDeatail) { string strRes = string.Empty; if ((!(m_dictFormula == null)) && (!(item.m_listSgnls == null))) { for (int i = 0; i < item.m_listSgnls.Count; i++) { for (int j = 0; j < item.m_listSgnls[i].m_arSPars.Length; j++) { foreach (string fKey in m_dictFormula.Keys) { if (item.m_listSgnls[i].m_arSPars[j].IndexOf(fKey,StringComparison.InvariantCultureIgnoreCase) == 0) { // найдена формула - требуется: // 1) добавить к группе сигналов описание формулы item.AddFormula(fKey,m_dictFormula[fKey]); //// 2) заменить идентификаторы аргументов-сигналов на локальные идентификаторы ИЛИ индексы сигналов //if (item.ReinitArgs(i, j) < 0) // throw new Exception(@"FileINI::ctor () - initGroupSignalsFormula (" + throwMsgDeatail + @") - ..."); //else // ; // второй формулы для сигнала не будет - прерываем 2 цикла - продолжаем поиск со следующего сигнала j = item.m_listSgnls[i].m_arSPars.Length; // установить признак для прерывания внешнего цикла break; // прервать текущий цикл } else { ; } } } } } else { ; // в словаре приложения нет ни одной формулы ИЛИ нет ни одного сигнала к к оторому можно применить хотя бы одну ыормулу } }
/// <summary> /// Конструктор - основной (с параметрами) /// </summary> /// <param name="grpSgnls">Объект группы сигналов из файла конфигурации</param> public GroupSignalsDest(GROUP_SIGNALS_SRC grpSgnls) : base(grpSgnls) { }
/// <summary> /// Создать группу сигналов /// </summary> /// <param name="grpSgnls">Объект группы сигналов из файла конфигурации</param> /// <returns>Объект группы сигналов</returns> protected override GroupSignals createGroupSignals(GROUP_SIGNALS_SRC grpSgnls) { return(createGroupSignals(typeof(GroupSignalsDest), grpSgnls) as GroupSignals); }
/// <summary> /// Добавить группу и ее значения /// </summary> /// <param name="indxSrc">Индекс панели (источник, неазначение)</param> /// <param name="type">Тип группы</param> /// <param name="secGroup">Наименование для секции со значениями параметров группы</param> /// <returns>Результат выполнения</returns> private int addGroupValues(INDEX_SRC indxSrc, Type type, string shrName, string secGroup) { int iRes = 0; //Результат выполнения //Индекс типа элемента группы (источник, сигнал) INDEX_TYPE_GROUP indxTypeGroup; ////Вариант №1 //switch (typeof(type)) //{ // default: // break; //} //Вариант №2 ITEM_SRC itemSrc = null; if (type == typeof(GROUP_SRC)) {//Источник indxTypeGroup = INDEX_TYPE_GROUP.SRC; } else if (type == typeof(GROUP_SIGNALS_SRC)) { //Сигнал indxTypeGroup = INDEX_TYPE_GROUP.SIGNAL; } else { throw new Exception(@"FileINI::addGroupValues () - неизвестный тип группы: " + type.FullName); } //Добавить элемент группы switch (indxTypeGroup) { case INDEX_TYPE_GROUP.SRC: //Добавить группу источников itemSrc = new GROUP_SRC(); (itemSrc as GROUP_SRC).m_IDCurrentConnSett = GetSecValueOfKey(secGroup,@"SCUR"); (itemSrc as GROUP_SRC).m_strDLLName = GetSecValueOfKey(secGroup,@"DLL_NAME"); //Инициализировать список с параметрами для групп сигналов для группы источников (itemSrc as GROUP_SRC).m_listGroupSignalsPars = null; (itemSrc as GROUP_SRC).m_listGroupSignalsPars = new List <GROUP_SIGNALS_PARS> (); //Получить ниаменования параметров для групп сигналов List <string> pars = GetSecValueOfKey(secGroup,KEY_TREE_SGNLS[(int)INDEX_KEY_SIGNAL.GROUP_SIGNALS] + s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET] + @"PARS").Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL]).ToList <string> (); string[] vals; string key = string.Empty; int j = 0; while (true) { key = KEY_TREE_SGNLS[(int)INDEX_KEY_SIGNAL.GROUP_SIGNALS] + j.ToString(); if (isSecKey(secGroup,key) == true) { vals = GetSecValueOfKey(secGroup,key).Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL]); if (vals.Length == pars.Count) { //??? каждую итерацию будет определяться тип 'GROUP_SIGNAL_PARS' (itemSrc as GROUP_SRC).SetGroupSignalsPars(pars,vals); } else { string msg = @"FileINI::addGroupValues () - не установлены параметры для [" + secGroup + @", " + key + @"] - ..."; ////Вариант №1 - аврийно завершить загрузку - работу приложения //throw new Exception(msg); //Вариант №2 - зафиксировать ошибку - продолжить загрузку Logging.Logg().Error(msg,Logging.INDEX_MESSAGE.NOT_SET); } } else { break; } j++; } m_arListGroupValues[(int)indxSrc].m_listGroupSrc.Add(itemSrc as GROUP_SRC); break; case INDEX_TYPE_GROUP.SIGNAL: //Добавить группу сигналов itemSrc = new GROUP_SIGNALS_SRC(); //(itemSrc as GROUP_SIGNALS_SRC).m_iAutoStart = bool.Parse(GetSecValueOfKey(secGroup, @"AUTO_START")) == true ? 1 : 0; //(itemSrc as GROUP_SIGNALS_SRC).m_mode = bool.Parse(GetSecValueOfKey(secGroup, @"CUR_INTERVAL_STATE")) == true ? MODE_WORK.CUR_INTERVAL : MODE_WORK.COSTUMIZE; //if (Int32.TryParse(GetSecValueOfKey(secGroup, @"CURINTERVAL_PERIODLOCAL"), out (itemSrc as GROUP_SIGNALS_SRC).m_arWorkIntervals[(int)MODE_WORK.CUR_INTERVAL].m_iInterval) == false) // (itemSrc as GROUP_SIGNALS_SRC).m_arWorkIntervals[(int)MODE_WORK.CUR_INTERVAL].m_iInterval = -1; //else // ; //parseWorkInterval(GetSecValueOfKey(secGroup, @"COSTUMIZE_VALUE"), ref (itemSrc as GROUP_SIGNALS_SRC).m_arWorkIntervals[(int)MODE_WORK.COSTUMIZE]); m_arListGroupValues[(int)indxSrc].m_listGroupSgnlsSrc.Add(itemSrc as GROUP_SIGNALS_SRC); break; default: break; } //Проверить наличие секции if ((isSec(secGroup) == true) && (!(itemSrc == null))) { //Присвоить наименование группы элементов (источников, сигналов) itemSrc.m_strID = secGroup.Split(s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET])[1]; itemSrc.m_strShrName = shrName; string[] values //ЗначениЕ для элемента группы ,vals; //ЗначениЕ для (1-го) параметра элемента группы //Присвоить "дополнительные" значения для группы //if (typeGroup == INDEX_TYPE_GROUP.SRC) if (itemSrc is GROUP_SRC) {//Только для группы источников (itemSrc as GROUP_SRC).SetAdding(GetSecValueOfKey(secGroup,@"ADDING").Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL])); } else { ; } int j = -1; //Индекс для ключа элемента группы (источник, сигнал) в секции string key = string.Empty; //Ключ для элемента группы (источник, сигнал) в секции //Получить словарь значений секции Dictionary <string,string> dictSecValues = getSecValues(secGroup); ////ЗначениЯ для элемента группы //// только для источника, т.к. для сигнала ... (см. 'SIGNAL_SRC') //Dictionary <string, string> dictItemValues; //Проверить наличие значений в секции if (!(dictSecValues == null)) { string keyPars = (indxTypeGroup == INDEX_TYPE_GROUP.SRC ? KEY_TREE_SRC[(int)INDEX_KEY_SRC.SRC_OF_GROUP] : indxTypeGroup == INDEX_TYPE_GROUP.SIGNAL ? KEY_TREE_SGNLS[(int)INDEX_KEY_SIGNAL.SIGNAL_OF_GROUP] : string.Empty) + s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET] + KEY_PARS; //Получить наименовния параметров для элемента группы (источник, сигнал) itemSrc.m_listSKeys = GetSecValueOfKey(secGroup,keyPars).Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL]).ToList <string> (); foreach (string parName in itemSrc.m_listSKeys) { if (parName.Equals(string.Empty) == true) { throw new Exception(@"FileINI::addGroupValues (" + indxSrc.ToString() + @", " + type.AssemblyQualifiedName + @", " + secGroup + @") - ..."); } else { ; } } j = 0; //1-ый индекс == 0 while (true) { //Сфрмировать ключ элемента группы в секции switch (indxTypeGroup) { case INDEX_TYPE_GROUP.SRC: //Источник key = KEY_TREE_SRC[(int)INDEX_KEY_SRC.SRC_OF_GROUP]; break; case INDEX_TYPE_GROUP.SIGNAL: //Сигнал key = KEY_TREE_SGNLS[(int)INDEX_KEY_SIGNAL.SIGNAL_OF_GROUP]; break; default: break; } //Добавить к ключу индекс key += j.ToString(); //Проверить наличие ключа в сеекции if (isSecKey(secGroup,key) == true) { //Получить значение по ключу для элмента группы (источник, сигнал) values = GetSecValueOfKey(secGroup,key).Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL]); if (values.Length == itemSrc.m_listSKeys.Count) { switch (indxTypeGroup) { case INDEX_TYPE_GROUP.SRC: //Источник //Инициализация, если элемент группы 1-ый if ((itemSrc as GROUP_SRC).m_dictConnSett == null) { (itemSrc as GROUP_SRC).m_dictConnSett = new Dictionary <string,ConnectionSettings>(); } else { ; } (itemSrc as GROUP_SRC).m_dictConnSett.Add(KEY_TREE_SRC[(int)INDEX_KEY_SRC.SRC_OF_GROUP] + (itemSrc as GROUP_SRC).m_dictConnSett.Count ,new ConnectionSettings( Int32.Parse(values[itemSrc.m_listSKeys.IndexOf(@"ID")]) ,values[itemSrc.m_listSKeys.IndexOf(@"NAME_SHR")] ,values[itemSrc.m_listSKeys.IndexOf(@"IP")] ,Int32.Parse(values[itemSrc.m_listSKeys.IndexOf(@"PORT")]) ,values[itemSrc.m_listSKeys.IndexOf(@"DB_NAME")] ,values[itemSrc.m_listSKeys.IndexOf(@"UID")] ,values[itemSrc.m_listSKeys.IndexOf(@"PSWD*")] )); break; case INDEX_TYPE_GROUP.SIGNAL: //Сигнал //Инициализация, если элемент группы 1-ый if ((itemSrc as GROUP_SIGNALS_SRC).m_listSgnls == null) { (itemSrc as GROUP_SIGNALS_SRC).m_listSgnls = new List <SIGNAL_SRC>(); } else { ; } (itemSrc as GROUP_SIGNALS_SRC).m_listSgnls.Add(new SIGNAL_SRC()); (itemSrc as GROUP_SIGNALS_SRC).m_listSgnls[(itemSrc as GROUP_SIGNALS_SRC).m_listSgnls.Count - 1].m_arSPars = new string[values.Length]; values.CopyTo((itemSrc as GROUP_SIGNALS_SRC).m_listSgnls[(itemSrc as GROUP_SIGNALS_SRC).m_listSgnls.Count - 1].m_arSPars,0); break; default: break; } } else { //Значение по ключу не соответствует формату break; } } else { //Ключ в секции не найден break; } //Увеличить индекс элемента (источник, сигнал) j++; } } else { //Секция есть, но в ней не определен ни один источник... iRes = -1; //??? } } else { throw new Exception(@"FileINI::ctor () - addGroupValues () - группа объявлена, но значения не определены [" + secGroup + @"] ..."); } return(iRes); }
/// <summary> /// Заполнить рабочий элемент - список групп /// </summary> /// <param name="indxWork">Индекс панели</param> /// <param name="grpSrc">Объект с данными для заполнения</param> private void fillWorkItem(INDEX_SRC indxWork, GROUP_SIGNALS_SRC grpSrc) { m_arLoader[(int)indxWork].FillWorkItem(grpSrc); }