Exemple #1
0
        /// <summary>
        /// Обработчик события приема сообщений от вкладки (панели) "Конфигурация"
        /// </summary>
        /// <param name="obj">Массив объектов сообщения</param>
        private void OnEvtDataAskedFormMain_PanelConfig(object obj)
        {
            EventArgsDataHost ev = obj as EventArgsDataHost;

            //ev.id - здесь всегда = -1
            m_handler.Push(m_panelConfig, ev.par as object[]);
        }
        /// <summary>
        /// Обработчик запросов от клиента
        /// </summary>
        /// <param name="obj"></param>
        public override void OnEvtDataRecievedHost(object obj)
        {
            EventArgsDataHost ev     = obj as EventArgsDataHost;     //Переданные значения из-вне
            HHandlerDbULoader target = _object as HHandlerDbULoader; //Целевой объект

            switch (ev.id)
            {
            case (int)ID_DATA_ASKED_HOST.INIT_SOURCE:     //Приняты параметры для инициализации целевого объекта
                target.Initialize(ev.par as object []);
                break;

            case (int)ID_DATA_ASKED_HOST.INIT_SIGNALS:     //Приняты параметры инициализации группы сигналов
                //Инициализация группы сигналов по идентифактору [0]
                if (!(target.Initialize((int)(ev.par as object[])[0],(ev.par as object[])[1] as object[]) == 0))
                {
                    //??? ошибка
                    ;
                }
                else
                {
                    ;
                }
                break;

            case (int)ID_DATA_ASKED_HOST.START:     //Принята команда на запуск группы сигналов
                //Проверить признак получения целевым объектом параметоров для инициализации
                if (m_markDataHost.IsMarked((int)ID_DATA_ASKED_HOST.INIT_SOURCE) == true)
                {
                    //Инициализация группы сигналов по идентифактору [0]
                    if (target.Initialize((int)(ev.par as object[])[0],(ev.par as object[])[1] as object[]) == 0)
                    {
                        //Запустить на выполнение группу сигналов
                        target.Start((int)(ev.par as object[])[0]);
                    }
                    else
                    {
                        //Отправить запрос клиенту для получения параметров инициализации для группы сигналов
                        DataAskedHost(new object[] { (int)ID_DATA_ASKED_HOST.INIT_SIGNALS,(int)(ev.par as object[])[0] });
                    }
                }
                else
                {
                    //Отправить запрос клиенту для получения целевым объектом параметоров для инициализации
                    DataAskedHost(new object[] { (int)ID_DATA_ASKED_HOST.INIT_SOURCE,(int)(ev.par as object[])[0] });
                }
                break;

            case (int)ID_DATA_ASKED_HOST.STOP:
                target.Stop((int)(ev.par as object[])[0]);
                break;

            default:
                break;
            }
            //Вызвать метод "базового" объекта
            base.OnEvtDataRecievedHost(obj);
        }
Exemple #3
0
            protected override int StateResponse(int state,object obj)
            {
                int       iRes      = 0;
                ItemQueue itemQueue = Peek;

                CONN_SETT_TYPE    type = CONN_SETT_TYPE.UNKNOWN;
                EventArgsDataHost arg;

                switch ((EVENT)state)
                {
                case EVENT.LIST_SIGNAL:
                    type = (CONN_SETT_TYPE)itemQueue.Pars[1];

                    if (Signals.ContainsKey(type) == false)
                    {
                        Signals.Add(type,new List <SIGNAL>(obj as IList <SIGNAL>));
                    }
                    else
                    {
                        Signals[type] = new List <SIGNAL>(obj as IList <SIGNAL>);
                    }

                    arg = new EventArgsDataHost(null,new object[] { (EVENT)state,type });
                    break;

                case EVENT.CUR_VALUES:
                case EVENT.CHECK_VALUES:
                    type = (CONN_SETT_TYPE)itemQueue.Pars[0];

                    if (_values.ContainsKey(type) == false)
                    {
                        _values.Add(type,VALUES.Copy(obj as VALUES));
                    }
                    else
                    {
                        _values[type] = VALUES.Copy(obj as VALUES);
                    }
                    // дополнительно передать ккс-код (для поиска столбца)
                    arg = new EventArgsDataHost(null,new object[] { (EVENT)state,type,Signals[type].ElementAt((int)itemQueue.Pars[1]).kks_code });
                    break;

                default:
                    arg = new EventArgsDataHost(null,new object[] { });
                    break;
                }

                itemQueue.m_dataHostRecieved.OnEvtDataRecievedHost(arg);

                return(iRes);
            }
Exemple #4
0
            /// <summary>
            ///
            /// </summary>
            /// <param name="ev"></param>
            public void OnEvtDataRecievedHost(EventArgsDataHost ev)
            {
                switch (ev.id)
                {
                case (int)ID_ASKED_DATAHOST.CONN_SETT:
                    //Установить соедиение
                    m_getDate = new HGetDate((ConnectionSettings)ev.par[0], recievedGetDate, errorGetDate);
                    //Запустить поток
                    m_getDate.StartDbInterfaces();
                    m_getDate.Start();
                    break;

                default:
                    break;
                }
            }
Exemple #5
0
            /// <summary>
            /// Обработчик события - получение данных (по запросу) от сервера
            /// </summary>
            /// <param name="ev">Аргумент события - полученные данные</param>
            public void OnEvtDataRecievedHost(EventArgsDataHost ev)
            {
                switch (ev.id_detail)
                {
                case (int)ID_ASKED_DATAHOST.CONN_SETT:     //получены параметры соединения
                    //Установить соедиение - создать объект
                    m_getDate = new HGetDate((ConnectionSettings)ev.par[0], recievedGetDate, errorGetDate);
                    //Установить соедиение - запустить поток обработки(отправления) запросов
                    m_getDate.StartDbInterfaces();
                    //Установить соедиение - начать обработку запросов
                    m_getDate.Start();
                    break;

                default:
                    break;
                }
            }
        public override void OnEvtDataRecievedHost(object obj)
        {
            EventArgsDataHost     ev     = obj as EventArgsDataHost;
            HHandlerDbULoaderDest target = _object as HHandlerDbULoaderDest;

            switch (ev.id)
            {
            case (int)ID_DATA_ASKED_HOST.TO_INSERT:
                target.Insert((int)(ev.par as object[])[0],(ev.par as object[])[1] as DataTable,(ev.par as object[])[2] as object[]);
                break;

            default:
                break;
            }

            base.OnEvtDataRecievedHost(obj);
        }
Exemple #7
0
 /// <summary>
 /// Делегат обработки события - выбор п. меню
 /// </summary>
 /// <param name="obj">Объект, инициировавший событие (плюгИн вкладки)</param>
 private void FormMain_EvtDataAskedHost(EventArgsDataHost ev)
 {
     //??? повторная проверка типов аргументов сообщения
     //  первоначально разбирается в 'Plugins.OnEvtDataAskedHost'
     if (ev.par[0] is ToolStripMenuItem)
     {
         this.BeginInvoke(new Action <EventArgsDataHost>(postOnClickMenuItem), ev);
     }
     else if ((ev.par[0].GetType().IsPrimitive == true) &&
              ((HFunc.ID_FUNC_DATA_ASKED_HOST)ev.par[0] == HFunc.ID_FUNC_DATA_ASKED_HOST.MESSAGE_TO_STATUSSTRIP))
     {
         // TODO: отобразить сообщение в строке статуса
         ;
     }
     else
     {
         throw new Exception(string.Format(@"Неизвестный объект для обработки из функциональной библиотеки..."));
     }
 }
Exemple #8
0
        private void onEvtCompleted(EventArgsDataHost ev)
        {
            HandlerSignalQueue.EVENT evt;
            CONN_SETT_TYPE           type;
            SIGNAL signal;
            string kks_code = string.Empty;

            evt  = (HandlerSignalQueue.EVENT)ev.par[0];
            type = (CONN_SETT_TYPE)ev.par[1];

            switch (evt)
            {
            case HandlerSignalQueue.EVENT.LIST_SIGNAL:
                m_panelManagement.InitializeSignalList(type,m_HandlerQueue.Signals[type].Select(sgnl => { return(sgnl.name_shr); }));
                break;

            case HandlerSignalQueue.EVENT.CUR_VALUES:
                draw(type);
                //m_threadDraw.RunWorkerAsync(type);
                break;

            case HandlerSignalQueue.EVENT.CHECK_VALUES:
                kks_code = (string)ev.par[2];
                signal   = m_HandlerQueue.Signals[type].FirstOrDefault(sgnl => { return(sgnl.kks_code.Equals(kks_code) == true); });

                if (m_dictDataGridViewValues[type].ActionColumn(signal.kks_code
                                                                ,signal.name_shr) == true)
                {
                    // запросить значения для заполнения нового столбца
                    //??? оптимизация, сравнение с предыдущим, полученным по 'SELECT', набором значений - должны совпадать => запрос не требуется
                    m_dictDataGridViewValues[type].Fill(m_HandlerQueue.Values(type));
                }
                else
                {
                    // столбец удален - ничего не делаем
                    ;
                }
                break;

            default:
                break;
            }
        }
Exemple #9
0
        public override void OnEvtDataRecievedHost(object obj)
        {
            EventArgsDataHost     ev     = obj as EventArgsDataHost;
            HHandlerDbULoaderDest target = _objects[KeySingleton] as HHandlerDbULoaderDest;

            switch (ev.id_detail)
            {
            case (int)ID_DATA_ASKED_HOST.TO_INSERT:
                target.Insert((int)(ev.par as object[])[0],(ev.par as object[])[1] as DataTable,(ev.par as object[])[2] as object[]);
                break;

            //case (int)ID_DATA_ASKED_HOST.TO_START:
            //    target.InitSource(ev.par);
            //    break;
            case (int)ID_DATA_ASKED_HOST.TO_STOP:
                target.Clear((int)(ev.par as object[])[0]);
                break;

            default:
                break;
            }

            base.OnEvtDataRecievedHost(obj);
        }
Exemple #10
0
        /// <summary>
        /// Обработчик события 'EvtDataAskedHostQueue' для установления взаимосвязи между "связанными" (по конф./файлу) по "цепочке" сигналов - групп сигналов - групп источников
        /// </summary>
        /// <param name="par">Параметры для установления соответствия</param>
        private void onEvtDataAskedHostQueue_GroupSourcesDest(object par)
        {
            EventArgsDataHost ev = par as EventArgsDataHost;

            object [] pars = ev.par as object [];

            GroupSourcesDest grpSrcDest = pars[0] as GroupSourcesDest;

            int indxNeededGroupSources = (int)pars[1];

            foreach (GroupSources grpSrcSource in m_listGroupSources[(int)INDEX_SRC.SOURCE])
            {
                if (FormMain.FileINI.GetIDIndex(grpSrcSource.m_strID) == indxNeededGroupSources)
                {
                    if ((ID_DATA_ASKED_HOST)ev.id == ID_DATA_ASKED_HOST.START)
                    {
                        grpSrcSource.AddDelegatePlugInOnEvtDataAskedHost(FormMain.FileINI.GetIDIndex(grpSrcDest.m_strID), grpSrcDest.Clone_OnEvtDataAskedHost);
                    }
                    else
                    if ((ID_DATA_ASKED_HOST)ev.id == ID_DATA_ASKED_HOST.STOP)
                    {
                        grpSrcSource.RemoveDelegatePlugInOnEvtDataAskedHost(FormMain.FileINI.GetIDIndex(grpSrcDest.m_strID), grpSrcDest.Clone_OnEvtDataAskedHost);
                    }
                    else
                    {
                        ;
                    }

                    break;
                }
                else
                {
                    ;
                }
            }
        }
Exemple #11
0
        /// <summary>
        /// Обработчик события 'EvtDataAskedHostQueue'
        /// </summary>
        /// <param name="par">Параметры/аргументы события</param>
        private void onEvtDataAskedHostQueue_GroupSources(object par)
        {
            EventArgsDataHost ev = par as EventArgsDataHost;

            object [] pars = ev.par as object [];

            // массив параметров
            // id_main - индекс типа группы источников (INDEX_SRC)
            // id_detail - индекс группы источников (идентификатор)
            //  'par' различается в ~ от типа объекта в 'pars[0]'
            // для 'GroupSourcesSrc, GroupSourcesDest' - длина=3 (набор исходный): [0] - индекс группы сигналов, [1] - команда, [2 | при необходимости] - 'ID_HEAD_ASKED_HOST'
            // для 'GroupSourcesDest' - длина=2 (набор изменен): [0] - объект 'GroupSourcesDest', [1] - команда
            GroupSourcesDest grpSrcDest = null;                              // только для 2-го набора
            int indx = -1;                                                   // для разных наборов - различное значение
            ID_HEAD_ASKED_HOST idHeadAskedHost = ID_HEAD_ASKED_HOST.UNKNOWN; // только для исходного набора (для [START | STOP] всегда = 'CONFIRM')
            ID_DATA_ASKED_HOST id_cmd          = (ID_DATA_ASKED_HOST)pars[1];

            if (pars[0].GetType().IsPrimitive == true)
            {                        // действия по набору-1
                indx = (int)pars[0]; // индекс группы сигналов
                if (pars.Length == 2)
                {
                    // единственный параметр
                    switch (id_cmd)
                    {
                    //case ID_DATA_ASKED_HOST.START:
                    //    add(new object [] { ev.id_main, indx }, TimeSpan.FromMilliseconds (16667));
                    //    break;
                    case ID_DATA_ASKED_HOST.STOP:
#if _STATE_MANAGER
                        remove(ev.id_main, ev.id_detail, indx);
#endif
                        break;

                    case ID_DATA_ASKED_HOST.TABLE_RES:
#if _STATE_MANAGER
                        update(ev.id_main, ev.id_detail, indx);
#endif
                        break;

                    default:
                        break;
                    }
                }
                else
                // 3 параметра
                if (pars.Length == 3)
                {
                    if (pars[2].GetType().IsEnum == true)
                    {    //ID_DATA_ASKED_HOST.START, ID_DATA_ASKED_HOST.STOP; ID_HEAD_ASKED_HOST.CONFIRM
                        idHeadAskedHost = (ID_HEAD_ASKED_HOST)pars[2];

                        if (idHeadAskedHost == ID_HEAD_ASKED_HOST.CONFIRM)
#if _STATE_MANAGER
                        { confirm(ev.id_main, ev.id_detail, indx)
#else
#endif
                          ; }
                        else
                        {
                            // ошибка - переменная имеет непредвиденное значение
                            throw new MissingMemberException(@"HHandleQueue::onEvtDataAskedHostQueue_GroupSources () - ...");
                        }
                    }
                    else
                    {    //ID_DATA_ASKED_HOST.START
#if _STATE_MANAGER
                        // добавить группу сигналов в список контролируемых
                        add(new object[] { ev.id_main, ev.id_detail, indx }, TimeSpan.FromMilliseconds(((TimeSpan)pars[2]).TotalMilliseconds));
#else
#endif
                    }
                }
                else
                {
                    ;     // других вариантов по количеству параметров - нет
                }
            }
            else
            {// действия по набору-2 (для установления взаимосвязи между "связанными" (по конф./файлу) по "цепочке" сигналов - групп сигналов - групп источников)
                if (pars[0] is GroupSourcesDest)
                {
                    grpSrcDest = pars[0] as GroupSourcesDest;
                    indx       = ev.id_detail; // индекс группы источников

                    foreach (GroupSources grpSrcSource in m_listGroupSources[(int)INDEX_SRC.SOURCE])
                    {
                        if (FormMain.FileINI.GetIDIndex(grpSrcSource.m_strID) == indx) //indxNeededGroupSources
                        {
                            if (id_cmd == ID_DATA_ASKED_HOST.START)
                            {
                                grpSrcSource.AddDelegatePlugInOnEvtDataAskedHost(FormMain.FileINI.GetIDIndex(grpSrcDest.m_strID), grpSrcDest.Clone_OnEvtDataAskedHost);
                            }
                            else
                            if (id_cmd == ID_DATA_ASKED_HOST.STOP)
                            {
                                grpSrcSource.RemoveDelegatePlugInOnEvtDataAskedHost(FormMain.FileINI.GetIDIndex(grpSrcDest.m_strID), grpSrcDest.Clone_OnEvtDataAskedHost);
                            }
                            else
                            {
                                ;
                            }

                            break;
                        }
                        else
                        {
                            ;
                        }
                    }
                }
                else
                {
                    // ошибка - объект имеет неизвестный тип
                    throw new InvalidCastException(@"HHandleQueue::onEvtDataAskedHostQueue_GroupSources () - ...");
                }
            }
        }
Exemple #12
0
        /// <summary>
        /// Передать в очередь обработки событий сообщение о необходимости установления/разрыва связи между группами источников
        /// </summary>
        /// <param name="ev">Аргумент при передаче сообщения</param>
        public override void PerformDataAskedHostQueue(EventArgsDataHost ev)
        {
            //id_main - идентификатор типа объекта в загруженной в ОЗУ библиотеки
            //id_detail - команда на изменение состояния группы сигналов
            //В 0-ом параметре передан индекс (???идентификатор) группы сигналов
            int indxGrpSgnls = (int)(ev.par as object[])[0];
            //Во 2-ом параметре передан признак инициирования/подтверждения изменения состояния группы сигналов
            ID_DATA_ASKED_HOST idDataAskedHost = (ID_DATA_ASKED_HOST)(ev.par as object[])[1];

            ////Во 2-ом параметре передан признак инициирования/подтверждения изменения состояния группы сигналов
            //ID_HEAD_ASKED_HOST idHeadAskedHost = (ID_HEAD_ASKED_HOST)(ev.par as object[])[2];

            base.PerformDataAskedHostQueue(ev);

            List <int> listNeededIndexGroupSources = GetListNeededIndexGroupSources(indxGrpSgnls);
            bool       bEvtDataAskedHostQueue      = false;

            lock (this) {
                foreach (int indx in listNeededIndexGroupSources)
                {
                    bEvtDataAskedHostQueue = false;

                    if (m_dictLinkedIndexGroupSources.ContainsKey(indx) == true)
                    {
                        if (idDataAskedHost == ID_DATA_ASKED_HOST.START)
                        {
                            m_dictLinkedIndexGroupSources[indx].Add(indxGrpSgnls);

                            if (m_dictLinkedIndexGroupSources[indx].Count == 1)
                            {
                                bEvtDataAskedHostQueue = true;
                            }
                            else
                            {
                                ;
                            }
                        }
                        else
                        if (idDataAskedHost == ID_DATA_ASKED_HOST.STOP)
                        {
                            m_dictLinkedIndexGroupSources[indx].Remove(indxGrpSgnls);

                            if (m_dictLinkedIndexGroupSources[indx].Count == 0)
                            {
                                // удаление выполнено корректно
                                bEvtDataAskedHostQueue = true;
                            }
                            else
                            {
                                ;
                            }
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    {
                        ;
                    }

                    if (bEvtDataAskedHostQueue == true)
                    {
                        base.PerformDataAskedHostQueue(new EventArgsDataHost(
                                                           (int)FormMain.INDEX_SRC.SOURCE //!!! подмена - передать "чужой" тип группы источников (не используется в обработчике)
                                                           , indx                         //!!! подмена - передать индекс "чужой" группы источников, но связанной с текущей
                                                           , new object[] { this          //!!! подмена - вместо идентификатора группы сигналов: сам текущий объект группы источников
                                                                            , ev.par[1] } // стандартно - команда, копия из полученного объекта - аргумента события
                                                           ));
                    }
                    else
                    {
                        ;
                    }
                }
            }
        }
Exemple #13
0
        /// <summary>
        /// Получает сообщения от библиотеки из "другого" (источника) объекта
        /// </summary>
        /// <param name="obj"></param>
        public void Clone_OnEvtDataAskedHost(object obj)
        {
            EventArgsDataHost ev = obj as EventArgsDataHost;
            int iIDGroupSignals  = 0; //??? д.б. указана в "запросе"

            //pars[0] - идентификатор события
            //pars[1] - идентификатор группы сигналов
            //pars[2] - таблица с данными для "вставки"
            //??? pars[3] - object [] с доп./параметрами, для ретрансляции
            object[] pars       = ev.par as object[];
            object[] parsToSend = null;

            //Logging.Logg().Debug(string.Format(@"GroupSourcesDest::Clone_OnEvtDataAskedHost (ev.par.Length={0}) - NAME={1}...", pars.Length, m_strShrName), Logging.INDEX_MESSAGE.NOT_SET);

            //pars[0] - идентификатор события
            switch ((ID_DATA_ASKED_HOST)pars[0])
            {
            case ID_DATA_ASKED_HOST.INIT_SOURCE:     //Получен запрос на парметры инициализации
                break;

            case ID_DATA_ASKED_HOST.INIT_SIGNALS:     //Получен запрос на обрабатываемую группу сигналов
                break;

            case ID_DATA_ASKED_HOST.TABLE_RES:
                parsToSend = new object[pars.Length - 1];
                //Проверить таблицу со значениями от библиотеки на 'null'
                if ((!(pars[2] == null)) &&
                    ((pars[2] as DataTable).Rows.Count > 0))
                {
                    //Заполнить для передачи основные параметры - таблицу
                    parsToSend[1] = (pars[2] as DataTable).Copy();
                    //Проверить наличие дополнительных параметров
                    //??? 07.12.2015 лишнее 'Dest' не обрабатывает - см. TO_START
                    if ((parsToSend.Length > 2) &&
                        (pars.Length > 3) &&
                        (!(pars[3] == null)))
                    {
                        parsToSend[2] = new object[(pars[3] as object[]).Length];
                        //Заполнить для передачи дополнительные параметры - массив объектов
                        ////Вариант №1
                        //for (int i = 0; i < (parsToSend[2] as object []).Length; i ++)
                        //    (parsToSend[2] as object [])[i] = (pars[3] as object[])[i];
                        //Вариант №2
                        (pars[3] as object[]).CopyTo(parsToSend[2] as object[], 0);
                    }
                    else
                    {
                        ;
                    }
                    //Установить взаимосвязь между полученными значениями группы сигналов и группой сигналов назначения
                    foreach (GroupSignalsDest grpSgnls in m_listGroupSignals)
                    {
                        if (!(grpSgnls.GetListNeededIndexGroupSignals().IndexOf((int)pars[1]) < 0))      //Да, группа сигналов 'grpSgnls' ожидает значения от группы сигналов '(int)pars[1]'
                        {
                            parsToSend[0] = FormMain.FileINI.GetIDIndex(grpSgnls.m_strID);
                            PerformDataAskedHostPlugIn(new EventArgsDataHost(m_iIdTypePlugInObjectLoaded, (int)ID_DATA_ASKED_HOST.TO_INSERT, parsToSend));

                            //Logging.Logg().Debug(@"GroupSources::Clone_OnEvtDataAskedHost () - NAME=" + m_strShrName + @", от [ID=" + (int)pars[1] + @"] для [ID=" + parsToSend[0] + @"] ...", Logging.INDEX_MESSAGE.NOT_SET);
                        }
                        else
                        {
                            ;
                        }
                    }
                }
                else
                {
                    ;     // таблица со значениями от библиотеки = null
                }
                break;
            //case ID_DATA_ASKED_HOST.START:
            //    parsToSend = new object[(pars[3] as object[]).Length + 1]; // '+1' для идентификатора группы сигналов
            //    //Установить взаимосвязь между полученными значениями группы сигналов и группой сигналов назначения
            //    foreach (GroupSignalsDest grpSgnls in m_listGroupSignals)
            //        if (!(grpSgnls.GetListNeededIndexGroupSignals().IndexOf((int)pars[1]) < 0))
            //        {//Да, группа сигналов 'grpSgnls' ожидает значения от группы сигналов '(int)pars[1]'
            //            parsToSend [0] = FormMain.FileINI.GetIDIndex(grpSgnls.m_strID);
            //            parsToSend[1] = (MODE_WORK)(pars[3] as object[])[0]; //MODE_WORK
            //            parsToSend[2] = (int)(pars[3] as object[])[1]; //IdSourceConnSett
            //            parsToSend[3] = (int)(pars[3] as object[])[2]; //ID_TEC
            //            PerformDataAskedHostPlugIn(new EventArgsDataHost((int)ID_DATA_ASKED_HOST.TO_START, parsToSend));

            //            //Logging.Logg().Debug(@"GroupSources::Clone_OnEvtDataAskedHost () - NAME=" + m_strShrName + @", от [ID=" + (int)pars[1] + @"] для [ID=" + parsToSend[0] + @"] ...", Logging.INDEX_MESSAGE.NOT_SET);
            //        }
            //        else
            //            ;
            //    break;
            case ID_DATA_ASKED_HOST.STOP:
                parsToSend = new object[1];
                //Установить взаимосвязь между полученными значениями группы сигналов и группой сигналов назначения
                foreach (GroupSignalsDest grpSgnls in m_listGroupSignals)
                {
                    if ((!(grpSgnls.GetListNeededIndexGroupSignals().IndexOf((int)pars[1]) < 0)) &&
                        (grpSgnls.State == STATE.STARTED))
                    {
                        parsToSend[0] = FormMain.FileINI.GetIDIndex(grpSgnls.m_strID);
                        //Да, группа сигналов 'grpSgnls' ожидает значения от группы сигналов '(int)pars[1]';
                        PerformDataAskedHostPlugIn(new EventArgsDataHost(m_iIdTypePlugInObjectLoaded, (int)ID_DATA_ASKED_HOST.TO_STOP, parsToSend));
                    }
                    else
                    {
                        ;
                    }
                }
                break;

            case ID_DATA_ASKED_HOST.ERROR:
                iIDGroupSignals = (int)pars[1];
                break;

            default:
                break;
            }
        }
Exemple #14
0
        //private void onClickMenuItem(object obj, EventArgs ev)
        //{
        //    EventPlugInMenuItemClick(obj, new PlugInMenuItem.PlugInMenuItemEventArgs(-1));
        //}
        /// <summary>
        /// Обработчик события выбора (отобразить/закрыть вкладку) п. меню
        /// </summary>
        /// <param name="obj">Объект загруженной библиотеки вкладки</param>
        private void postOnClickMenuItem(EventArgsDataHost ev)
        {
            int idPlugIn                    = (int)ev.id_main
            , idFPanel                      = (int)ev.id_detail;
            PlugInMenuItem plugIn           = s_plugIns[idPlugIn] as PlugInMenuItem;
            bool           bMenuItemChecked =
                ((ToolStripMenuItem)ev.par[0]).Checked =
                    !((ToolStripMenuItem)ev.par[0]).Checked;
            bool bTabRemoved = false;

            if (bMenuItemChecked == true)
            {
                //Отобразить вкладку
                //m_TabCtrl.AddTabPage(plugIn.GetNameMenuItem(idFPanel), idFPanel, HTabCtrlEx.TYPE_TAB.FIXED);
                //m_TabCtrl.TabPages[m_TabCtrl.TabCount - 1].Controls.Add((Control)plugIn.GetObject(idFPanel));

                m_TabCtrl.AddTabPage((Control)plugIn.GetObject(idFPanel), plugIn.GetNameMenuItem(idFPanel), idFPanel, ASUTP.Control.HTabCtrlEx.TYPE_TAB.FIXED);
            }
            else
            {
                //Закрыть вкладку
                bTabRemoved = m_TabCtrl.RemoveTabPage(m_TabCtrl.IndexOfID(idFPanel)); //plugIn.GetNameMenuItem(idFPanel)
                if (bTabRemoved == false)
                {
                    Logging.Logg().Warning(@"FormMain::postOnClickMenuItem (idFPanel = " + idFPanel + @") - вкладка не была закрыта...", Logging.INDEX_MESSAGE.NOT_SET);
                }
                else
                {
                    ;
                }
            }

            if (m_iAutoActionTabs > 0)
            {
                m_iAutoActionTabs--;
            }
            else
            {
                ;
            }

            if (m_iAutoActionTabs == 0)
            {// закончился процесс автоматической загрузки (создания/добавления) вкладок
                if ((профайлАвтоЗагрузитьСохранитьToolStripMenuItem as ToolStripMenuItem).Checked == true)
                {
                    saveProfile();
                }
                else
                {
                    ;
                }

                if ((m_TabCtrl.PrevSelectedIndex < 0) &&
                    (bMenuItemChecked == true))
                {// только, если перед действием не была добавлена ни одна вкладка
                    m_TabCtrl.PrevSelectedIndex = 0;
                }
                else
                {
                    ;
                }
            }
            else
            {
                ;
            }
        }
        /// <summary>
        /// Обработчик события 'EvtDataAskedHostQueue'
        /// </summary>
        /// <param name="par">Параметры/аргументы события</param>
        private void onEvtDataAskedHostQueue_GroupSources(object par)
        {
            EventArgsDataHost ev = par as EventArgsDataHost;

            object [] pars = ev.par as object [];

            // массив параметров
            // id_main - индекс типа группы источников (FormMain.INDEX_SRC.)
            // id_detail - индекс группы источников (идентификатор)
            //  'par' различается в ~ от типа объекта в 'pars[0]'
            // для 'GroupSourcesSrc, GroupSourcesDest' - длина=3 (набор исходный): [0] - индекс группы сигналов, [1] - команда, [2 | при необходимости] - 'ID_HEAD_ASKED_HOST'
            // для 'GroupSourcesDest' - длина=2 (набор изменен): [0] - объект 'GroupSourcesDest', [1] - команда
            GroupSourcesDest grpSrcDest = null;                              // только для 2-го набора
            int indx = -1;                                                   // для разных наборов - различное значение
            ID_HEAD_ASKED_HOST idHeadAskedHost = ID_HEAD_ASKED_HOST.UNKNOWN; // только для исходного набора (для [START | STOP] всегда = 'CONFIRM')
            ID_DATA_ASKED_HOST id_cmd          = (ID_DATA_ASKED_HOST)pars[1];
            List <int>         listLinkedIndexGroupSignals;

            if (pars[0].GetType().IsPrimitive == true)
            {                        // действия по набору-1
                indx = (int)pars[0]; // индекс группы сигналов
                if (pars.Length == 2)
                {
                    switch (id_cmd)
                    {
                    //case ID_DATA_ASKED_HOST.START:
                    //    add(new object [] { ev.id_main, indx }, TimeSpan.FromMilliseconds (16667));
                    //    break;
                    case ID_DATA_ASKED_HOST.STOP:
#if _STATE_MANAGER
                        remove(ev.id_main, ev.id_detail, indx);
#endif
                        break;

                    default:
                        break;
                    }
                }
                else
                // 3 параметра
                if (pars.Length == 3)
                {
                    if (pars[2].GetType().IsPrimitive == true)
                    {
                        // примитивное значение - кол-во строк в таблице результата
                        switch (id_cmd)
                        {
                        case ID_DATA_ASKED_HOST.TABLE_RES:
#if _STATE_MANAGER
                            update(ev.id_main, ev.id_detail, indx);
                            // если группа сигналов группы источников принадлежит к источникам информации
                            if ((FormMain.INDEX_SRC.)ev.id_main == FormMain.INDEX_SRC.SOURCE)
                            {
                                // проверить кол-во строк в таблице результата
                                // в случае отсутствия строк, требуется обновить связанные с ней группы сигналов в группах источников назначения
                                // т.к. самостоятельно такие группы сигналов не обновляются, что м. привести к периодической выгрузке/загрузке библиотеки
                                if ((int)pars[2] == 0)
                                {
                                    // искать группы сигналов в группах источников назначения, связанные с указанной в аргументе
                                    foreach (GroupSourcesDest grp in m_listGroupSources[(int)FormMain.INDEX_SRC.DEST])
                                    {
                                        // найти в группе источников назначения такие группы сигналов, которые связаны с указанной в аргументе группой сигналов
                                        listLinkedIndexGroupSignals = grp.GetListLinkedIndexGroupSignals(ev.id_detail, indx);

                                        listLinkedIndexGroupSignals.ForEach(indxGrpSgnls => { update(FormMain.INDEX_SRC.DEST, FormMain.FileINI.GetIDIndex(grp.m_strID), indxGrpSgnls); });
                                    }
                                }
                                else
                                {
                                    ;
                                }
                            }
                            else
                            {
                                ;
                            }
#endif
                            break;
        /// <summary>
        /// Обработчик события 'EvtDataAskedHostQueue'
        /// </summary>
        /// <param name="par">Параметры/аргументы события</param>
        private void onEvtDataAskedHostQueue_GroupSources(object par)
        {
            EventArgsDataHost ev = par as EventArgsDataHost;

            object [] pars = ev.par as object [];

            // массив параметров
            // id_main - индекс типа группы источников (FormMain.INDEX_SRC.)
            // id_detail - индекс группы источников (идентификатор)
            //  'par' различается в ~ от типа объекта в 'pars[0]'
            // для 'GroupSourcesSrc, GroupSourcesDest' - длина=3 (набор исходный): [0] - индекс группы сигналов, [1] - команда, [2 | при необходимости] - 'ID_HEAD_ASKED_HOST'
            // для 'GroupSourcesDest' - длина=2 (набор изменен): [0] - объект 'GroupSourcesDest', [1] - команда
            GroupSourcesDest grpSrcDest = null;                              // только для 2-го набора
            int indx = -1;                                                   // для разных наборов - различное значение
            ID_HEAD_ASKED_HOST idHeadAskedHost = ID_HEAD_ASKED_HOST.UNKNOWN; // только для исходного набора (для [START | STOP] всегда = 'CONFIRM')
            ID_DATA_ASKED_HOST id_cmd          = (ID_DATA_ASKED_HOST)pars[1];
            List <int>         listLinkedIndexGroupSignals;

            if (pars[0].GetType().IsPrimitive == true)
            {                        // действия по набору-1
                indx = (int)pars[0]; // индекс группы сигналов
                if (pars.Length == 2)
                {
                    switch (id_cmd)
                    {
                    //case ID_DATA_ASKED_HOST.START:
                    //    add(new object [] { ev.id_main, indx }, TimeSpan.FromMilliseconds (16667));
                    //    break;
                    case ID_DATA_ASKED_HOST.STOP:
#if _STATE_MANAGER
                        remove(ev.id_main, ev.id_detail, indx);
#endif
                        break;

                    default:
                        break;
                    }
                }
                else
                // 3 параметра
                if (pars.Length == 3)
                {
                    if (pars[2].GetType().IsPrimitive == true)
                    {
                        // примитивное значение - кол-во строк в таблице результата
                        switch (id_cmd)
                        {
                        case ID_DATA_ASKED_HOST.TABLE_RES:
#if _STATE_MANAGER
                            update(ev.id_main, ev.id_detail, indx);
                            // если группа сигналов группы источников принадлежит к источникам информации
                            if ((FormMain.INDEX_SRC)ev.id_main == FormMain.INDEX_SRC.SOURCE)
                            {
                                // проверить кол-во строк в таблице результата
                                // в случае отсутствия строк, требуется обновить связанные с ней группы сигналов в группах источников назначения
                                // т.к. самостоятельно такие группы сигналов не обновляются, что м. привести к периодической выгрузке/загрузке библиотеки
                                if ((int)pars[2] == 0)
                                {
                                    // искать группы сигналов в группах источников назначения, связанные с указанной в аргументе
                                    foreach (GroupSourcesDest grp in m_listGroupSources[(int)FormMain.INDEX_SRC.DEST])
                                    {
                                        // найти в группе источников назначения такие группы сигналов, которые связаны с указанной в аргументе группой сигналов
                                        listLinkedIndexGroupSignals = grp.GetListLinkedIndexGroupSignals(ev.id_detail, indx);

                                        listLinkedIndexGroupSignals.ForEach(indxGrpSgnls => { update(FormMain.INDEX_SRC.DEST, FormMain.FileINI.GetIDIndex(grp.m_strID), indxGrpSgnls); });
                                    }
                                }
                                else
                                {
                                    ;
                                }
                            }
                            else
                            {
                                ;
                            }
#endif
                            break;

                        default:
                            break;
                        }
                    }
                    else
                    if (pars[2].GetType().IsEnum == true)
                    {
                        //ID_DATA_ASKED_HOST.START, ID_DATA_ASKED_HOST.STOP; ID_HEAD_ASKED_HOST.CONFIRM
                        idHeadAskedHost = (ID_HEAD_ASKED_HOST)pars[2];

                        if (idHeadAskedHost == ID_HEAD_ASKED_HOST.CONFIRM)
#if _STATE_MANAGER
                        { confirm(ev.id_main, ev.id_detail, indx)
#else
#endif
                          ; }
                        else
                        {
                            // ошибка - переменная имеет непредвиденное значение
                            throw new MissingMemberException(@"HHandleQueue::onEvtDataAskedHostQueue_GroupSources () - ...");
                        }
                    }
                    else            //ID_DATA_ASKED_HOST.START - объект 'TimeSpan'
                    {
#if _STATE_MANAGER
                        // добавить группу сигналов в список контролируемых
                        add(new object[] { ev.id_main, ev.id_detail, indx }, (TimeSpan)pars[2]);
#else
#endif
                    }
                }
                else
                {
                    ;         // других вариантов по количеству параметров - нет
                }
            }
            else
            {// действия по набору-2 (для установления взаимосвязи между "связанными" (по конф./файлу) по "цепочке" сигналов - групп сигналов - групп источников)
                if (pars[0] is GroupSourcesDest)
                {
                    grpSrcDest = pars[0] as GroupSourcesDest;
                    indx       = ev.id_detail;                                                                // индекс "чужой-связанной" группы источников

                    foreach (GroupSources grpSrcSource in m_listGroupSources[(int)FormMain.INDEX_SRC.SOURCE]) // можно использовать 'ev.id_main'
                    {
                        if (FormMain.FileINI.GetIDIndex(grpSrcSource.m_strID) == indx)                        //indxNeededGroupSources
                        {
                            if (id_cmd == ID_DATA_ASKED_HOST.START)
                            {
                                grpSrcSource.AddDelegatePlugInOnEvtDataAskedHost(FormMain.FileINI.GetIDIndex(grpSrcDest.m_strID), grpSrcDest.Clone_OnEvtDataAskedHost);
                            }
                            else
                            if (id_cmd == ID_DATA_ASKED_HOST.STOP)
                            {
                                grpSrcSource.RemoveDelegatePlugInOnEvtDataAskedHost(FormMain.FileINI.GetIDIndex(grpSrcDest.m_strID), grpSrcDest.Clone_OnEvtDataAskedHost);
                            }
                            else
                            {
                                ;
                            }

                            break;
                        }
                        else
                        {
                            ;
                        }
                    }
                }
                else
                {
                    // ошибка - объект имеет неизвестный тип
                    throw new InvalidCastException(@"HHandleQueue::onEvtDataAskedHostQueue_GroupSources () - ...");
                }
            }
        }