public void UpdateParameter(int type,string strIdGroup,string par,string val) { Logging.Logg().Debug(@"FileINI::UpdateParameter (ID=" + strIdGroup + @", par=" + par + @") - ...",Logging.INDEX_MESSAGE.NOT_SET); if (par.Equals(@"SCUR") == true) { m_arListGroupValues[(int)type].m_listGroupSrc[GetIDIndex(strIdGroup)].m_IDCurrentConnSett = val; SetSecValueOfKey(SEC_SRC_TYPES[(int)type] + s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET] + strIdGroup ,par ,val); } else if (par.Equals(@"ADDING") == true) { //???m_arListGroupValues[type].m_listGroupSrc[GetIDIndex(strIdGroup)].m_dictAdding = SetSecValueOfKey(SEC_SRC_TYPES[(int)type] + s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET] + strIdGroup ,par ,val); GROUP_SRC grpSrc = m_arListGroupValues[(int)type].m_listGroupSrc[GetIDIndex(strIdGroup)]; grpSrc.setAdding(val.Split(new char[] { s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL] })); } else { ; } }
public void UpdateParameter(int type,string strIdGroup,string par,string val) { Logging.Logg().Debug(@"FileINI::UpdateParameter (ID=" + strIdGroup + @", par=" + par + @") - ...",Logging.INDEX_MESSAGE.NOT_SET); if (par.Equals(@"SCUR") == true) {//Установить индекс тукущего источника данных //???Какова очередность внесения изменений (объект - файл, файл - объект) m_arListGroupValues[(int)type].m_listGroupSrc[GetIDIndex(strIdGroup)].m_IDCurrentConnSett = val; SetSecValueOfKey(SEC_SRC_TYPES[(int)type] + s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET] + strIdGroup ,par ,val); } else if (par.Equals(@"ADDING") == true) { //???Какова очередность внесения изменений (объект - файл, файл - объект) GROUP_SRC grpSrc = m_arListGroupValues[(int)type].m_listGroupSrc[GetIDIndex(strIdGroup)]; grpSrc.SetAdding(val.Split(new char[] { s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL] })); SetSecValueOfKey(SEC_SRC_TYPES[(int)type] + s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET] + strIdGroup ,par ,val); } else { int indx = GetIDIndex(par); string mask = string.Empty; //Проверить является параметр индексированным (источник, группа сигналов) if (!(indx < 0)) { //Обновляемый параметр - индексированный //???Какова очередность внесения изменений (объект - файл, файл - объект) GROUP_SRC grpSrc = m_arListGroupValues[(int)type].m_listGroupSrc[GetIDIndex(strIdGroup)]; //Строковый идентификатор раздела (группа источников) string secGroup = SEC_SRC_TYPES[(int)type] + s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET] + strIdGroup; //Получить ниаменования параметров для групп сигналов 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>(); try { grpSrc.SetGroupSignalsPars(pars,val.Split(new char[] { s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL] })); } catch (Exception e) { Logging.Logg().Exception(e ,@"FileINI::UpdateParameter (idGroup=" + strIdGroup + @", par=" + par + @", value=" + val + @") - ..." ,Logging.INDEX_MESSAGE.NOT_SET); } SetSecValueOfKey(secGroup ,par ,val); } else { ; } } }
/// <summary> /// Возвратить объект добавленной группы источников /// </summary> /// <param name="iSrc">Индекс типа группы (источник, назначение)</param> /// <param name="secGroup">Наименование секции группы источников</param> /// <returns>Объект группы источников</returns> private ITEM_SRC addGroupSources(int iSrc,string secGroup) { ITEM_SRC itemRes = null; string msgErr = string.Empty; itemRes = new GROUP_SRC(); (itemRes as GROUP_SRC).m_IDCurrentConnSett = GetSecValueOfKey(secGroup,@"SCUR"); (itemRes as GROUP_SRC).m_strDLLName = GetSecValueOfKey(secGroup,@"DLL_NAME"); //Инициализировать список с параметрами для групп сигналов для группы источников (itemRes as GROUP_SRC).m_listGroupSignalsPars = null; (itemRes 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' (itemRes as GROUP_SRC).SetGroupSignalsPars(pars,vals); } else { msgErr = @"FileINI::addGroupValues () - не установлены параметры для [" + secGroup + @", " + key + @"] - ..."; ////Вариант №1 - аврийно завершить загрузку - работу приложения //throw new Exception(msgErr); //Вариант №2 - зафиксировать ошибку - продолжить загрузку Logging.Logg().Error(msgErr,Logging.INDEX_MESSAGE.NOT_SET); } } else { break; } j++; } m_arListGroupValues[iSrc].m_listGroupSrc.Add(itemRes as GROUP_SRC); return(itemRes); }
/// <summary> /// Конструктор - основной (с параметрами) /// </summary> /// <param name="grpSrc">Объект группы источников из файла конфигурации</param> /// <param name="listGrpSgnls">Список объектов групп сигналов из файла конфигурации</param> public GroupSourcesDest(GROUP_SRC grpSrc, List <GROUP_SIGNALS_SRC> listGrpSgnls) : base(grpSrc, listGrpSgnls) { m_dictLinkedIndexGroupSources = new Dictionary <int, List <int> >(); List <int> listNeededIndexGroupSources = GetListNeededIndexGroupSources(); foreach (int indx in listNeededIndexGroupSources) { m_dictLinkedIndexGroupSources.Add(indx, new List <int>()); } }
public GROUP_SIGNALS_PARS GetObjectGroupSignalsPars(object[] pars) { GROUP_SRC itemSrc = getItemSrc((INDEX_SRC)pars[0],pars[1] as string) as GROUP_SRC; GROUP_SIGNALS_PARS grpSgnlsRes = null; //??? //return (getItemSrc(pars) as GROUP_SRC).m_listGroupSignalsPars[0]; foreach (GROUP_SIGNALS_PARS grpSgnlsPars in itemSrc.m_listGroupSignalsPars) { if (grpSgnlsPars.m_strId.Equals(pars[2] as string) == true) { grpSgnlsRes = grpSgnlsPars; break; } else { ; } } return(grpSgnlsRes); }
/// <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_SRC grpSrc) { m_arLoader[(int)indxWork].FillWorkItem(grpSrc); }