/// <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="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; int iStartArgs = -1; //Индекс 1-го символа аргументов в формуле string msgErr = string.Empty; // строка с сообщением об ошибке string[] values //ЗначениЕ для элемента группы ,vals; //ЗначениЕ для (1-го) параметра элемента группы int j = -1; //Индекс для ключа элемента группы (источник, сигнал) в секции string keyPars = string.Empty //Ключ для элемента группы (источник, сигнал) в секции ,key = string.Empty; Dictionary <string,string> dictSecValues = null; // словарь значений секции ////Вариант №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 = addGroupSources((int)indxSrc,secGroup); break; case INDEX_TYPE_GROUP.SIGNAL: //Добавить группу сигналов itemSrc = addGroupSignals((int)indxSrc); 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; //Присвоить "дополнительные" значения для группы //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 { ; } //Получить словарь значений секции dictSecValues = getSecValues(secGroup); ////ЗначениЯ для элемента группы //// только для источника, т.к. для сигнала ... (см. 'SIGNAL_SRC') //Dictionary <string, string> dictItemValues; //Проверить наличие значений в секции if (!(dictSecValues == null)) { 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: //Источник (itemSrc as GROUP_SRC).Add(KEY_TREE_SRC[(int)INDEX_KEY_SRC.SRC_OF_GROUP],values); break; case INDEX_TYPE_GROUP.SIGNAL: //Сигнал (itemSrc as GROUP_SIGNALS_SRC).Add(values); break; default: break; } } else { //Значение по ключу не соответствует формату break; } } else { //Ключ в секции не найден break; } //Увеличить индекс элемента (источник, сигнал) j++; } if (indxTypeGroup == INDEX_TYPE_GROUP.SIGNAL) { // если была добавлена группа сигналов try { if ((!((itemSrc as GROUP_SIGNALS_SRC).m_listSgnls == null)) && ((itemSrc as GROUP_SIGNALS_SRC).m_listSgnls.Count > 0)) { initGroupSignalsFormula(itemSrc as GROUP_SIGNALS_SRC,indxSrc.ToString() + @", " + type.AssemblyQualifiedName + @", " + secGroup); } else { ; // нет ни одного сигнала } } catch (Exception e) { Logging.Logg().Exception(e,@"FileINI::ctor () - addGroupValues () - ...",Logging.INDEX_MESSAGE.NOT_SET); } } else { ; } } else { //Секция есть, но в ней не определен ни один источник(сигнал)... iRes = -1; //??? } } else { throw new Exception(@"FileINI::ctor () - addGroupValues () - группа объявлена, но значения не определены [" + secGroup + @"] ..."); } return(iRes); }