Beispiel #1
0
            /// <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);
            }
Beispiel #2
0
            /// <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);
            }