Example #1
0
            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);
            }
Example #2
0
            /// <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
                {
                    ; // в словаре приложения нет ни одной формулы ИЛИ нет ни одного сигнала к к оторому можно применить хотя бы одну ыормулу
                }
            }
Example #3
0
 /// <summary>
 /// Конструктор - основной (с параметрами)
 /// </summary>
 /// <param name="grpSgnls">Объект группы сигналов из файла конфигурации</param>
 public GroupSignalsDest(GROUP_SIGNALS_SRC grpSgnls) : base(grpSgnls)
 {
 }
Example #4
0
 /// <summary>
 /// Создать группу сигналов
 /// </summary>
 /// <param name="grpSgnls">Объект группы сигналов из файла конфигурации</param>
 /// <returns>Объект группы сигналов</returns>
 protected override GroupSignals createGroupSignals(GROUP_SIGNALS_SRC grpSgnls)
 {
     return(createGroupSignals(typeof(GroupSignalsDest), grpSgnls) as GroupSignals);
 }
Example #5
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);
            }
Example #6
0
 /// <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);
 }