Example #1
0
        /// <summary>
        /// Реализация интерфейса 'IDataHost' - принять сообщение
        /// </summary>
        /// <param name="res">Объект с принятым сообщением</param>
        public void OnEvtDataRecievedHost(object res)
        {
            HHandlerQueue.StatesMachine stateMashine = (HHandlerQueue.StatesMachine)(res as object[])[0];

            try {
                switch (stateMashine)
                {
                case HHandlerQueue.StatesMachine.UDP_DEBUG:
                    m_SetupDebug.m_Turn             = bool.Parse((string)((res as object[])[1] as object[])[0]);
                    m_SetupDebug.m_tsIntervalSeries = new HTimeSpan((string)((res as object[])[1] as object[])[1]).Value;

                    state |= STATE.DEBUG;
                    break;

                case HHandlerQueue.StatesMachine.UDP_LISTENER:
                    m_Server =
                        //new IPEndPoint(IPAddress.Parse((string)((res as object[])[1] as object[])[0]),
                        (int)(res as object[])[1]
                    ;
                    break;

                case HHandlerQueue.StatesMachine.UDP_CONNECTED_CHANGE:
                    if ((bool)(res as object[])[1] == true)
                    {
                        connect();
                    }
                    else
                    {
                        disconnect();
                    }
                    break;

                case HHandlerQueue.StatesMachine.XML_PACKAGE_VERSION:
                    _versionXMLPackage = (string)(res as object[])[1];

                    DataAskedHost(new object[] {
                        new object[] { HHandlerQueue.StatesMachine.XML_PACKAGE_TEMPLATE, _versionXMLPackage }
                    });

                    state |= STATE.XML_VERSION;
                    break;

                case HHandlerQueue.StatesMachine.XML_PACKAGE_TEMPLATE:
                    s_packageTemplate = (XmlDocument)(res as object[])[1];

                    state |= STATE.XML_TEMPLATE;
                    break;

                default:
                    break;
                }
            } catch (Exception e) {
                Logging.Logg().Exception(e
                                         , string.Format(@"Обработка принятого сообщения по интерфесу 'IDataHost' событие={0}...", state.ToString())
                                         , Logging.INDEX_MESSAGE.NOT_SET);
            }
        }
Example #2
0
        /// <summary>
        /// Обработчик события - сообщение от обработчика очереди событий
        ///  (обратная связь с обработчиком очереди событий)
        /// </summary>
        /// <param name="obj">Объект - параметр(аргумент) события</param>
        private void onHandlerMainQueue(object obj)
        {
            HHandlerQueue.StatesMachine state = (HHandlerQueue.StatesMachine)(obj as object[])[0];

            // анонимная функция для выполнения в контексте формы
            DelegateBoolFunc connectedChanged = delegate(bool bConnected) {
                имитацияпакетодинToolStripMenuItem.Enabled     =
                    имитацияпакетциклToolStripMenuItem.Enabled =
                        m_cbxReadSessionStart.Checked          =
                            bConnected;
                m_cbxReadSessionStop.Checked =
                    !m_cbxReadSessionStart.Checked;
            };

            Logging.Logg().Debug(MethodBase.GetCurrentMethod()
                                 , string.Format(@"получено сообщение state={0} от обработчика очереди событий", state.ToString())
                                 , Logging.INDEX_MESSAGE.NOT_SET);

            switch (state)
            {
            case HHandlerQueue.StatesMachine.UDP_CONNECTED_CHANGED:
                // выполнить анонимный метод
                Invoke(new DelegateBoolFunc(connectedChanged), (bool)(obj as object[])[1]);
                break;

            case HHandlerQueue.StatesMachine.UDP_LISTENER_PACKAGE_RECIEVED:
                m_handlerPackage.Push(null, new object [] {
                    new object[] {
                        new object [] {
                            PackageHandlerQueue.StatesMachine.NEW, (obj as object[])[1], (obj as object[])[2]
                        }
                    }
                });
                break;

            case HHandlerQueue.StatesMachine.LIST_DEST:
                BeginInvoke(new DelegateObjectFunc(fillDestList), (obj as object[])[1]);
                // запуск, активация обработчика очереди событий при записи значений в БД
                m_handlerWriter.Push(null, new object [] {
                    new object[] {
                        new object [] {
                            WriterHandlerQueue.StatesMachine.LIST_DEST, (obj as object[])[1]
                        }
                    }
                });
                break;

            default:
                break;
            }
        }
Example #3
0
        public void OnEvtDataRecievedHost(object res)
        {
            HHandlerQueue.StatesMachine stateMashine = (HHandlerQueue.StatesMachine)(res as object[])[0];

            try {
                switch (stateMashine)
                {
                case HHandlerQueue.StatesMachine.NUDP_LISTENER:
                    m_iNPort = (int)(res as object[])[1];
                    break;

                case HHandlerQueue.StatesMachine.UDP_CONNECTED_CHANGE:
                    if ((bool)(res as object[])[1] == true)
                    {
                        connect();
                    }
                    else
                    {
                        disconnect();
                    }
                    break;

                case HHandlerQueue.StatesMachine.XML_PACKAGE_VERSION:
                    _versionXMLPackage = (string)(res as object[])[1];
                    // запросить номер порта, шаблон пакета(м номером версии)
                    DataAskedHost(new object[] {
                        new object[] { HHandlerQueue.StatesMachine.XML_PACKAGE_TEMPLATE, _versionXMLPackage }
                    });
                    break;

                case HHandlerQueue.StatesMachine.XML_PACKAGE_TEMPLATE:
                    s_packageTemplate = (XmlDocument)(res as object[])[1];

                    state |= STATE.XML_TEMPLATE;
                    break;

                default:
                    break;
                }
            } catch (Exception e) {
                Logging.Logg().Exception(e
                                         , string.Format(@"Обработка принятого сообщения по интерфесу 'IDataHost' событие={0}...", state.ToString())
                                         , Logging.INDEX_MESSAGE.NOT_SET);
            }
        }
Example #4
0
        /// <summary>
        /// Обработчик события 'EvtDataAskedHost' от панелей (источник, назначение)
        /// </summary>
        /// <param name="obj">Параметр для передачи-массив (0-панель, 1-индекс группы источников, 2-индекс группы сигналов)</param>
        private void onEvtDataAskedPanelWork_PanelLoader(object par)
        {
            object [] pars = (par as EventArgsDataHost).par[0] as object [];
            //Массив параметров для передачи
            object[] arObjToDataHost = new object [] { };
            //Событие для постановки в очередь обработки событий
            HHandlerQueue.StatesMachine state = HHandlerQueue.StatesMachine.UNKNOWN;
            //Определить панель-инициатор сообщения
            INDEX_SRC indxWork = (INDEX_SRC)this.Controls.GetChildIndex(pars[(int)PanelLoader.INDEX_PREPARE_PARS.OBJ] as PanelLoader);

            switch ((KEY_EVENT)pars[(int)PanelLoader.INDEX_PREPARE_PARS.KEY_EVT])
            {
            case KEY_EVENT.SELECTION_CHANGED:
                switch (indxWork)
                {
                case INDEX_SRC.SOURCE:
                    switch ((PanelLoader.KEY_CONTROLS)pars[(int)PanelLoader.INDEX_PREPARE_PARS.KEY_OBJ])
                    {
                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SOURCES:
                        state           = HHandlerQueue.StatesMachine.OBJ_SRC_GROUP_SOURCES;
                        arObjToDataHost = new object[] { new object[] { (int)state, pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL] } };
                        break;

                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SIGNALS:
                        //state = ;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)HHandlerQueue.StatesMachine.OBJ_SRC_GROUP_SIGNALS_PARS
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                            , new object[] {
                                (int)HHandlerQueue.StatesMachine.OBJ_SRC_GROUP_SIGNALS
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    case PanelLoader.KEY_CONTROLS.CBX_SOURCE_OF_GROUP:
                        state           = HHandlerQueue.StatesMachine.SET_IDCUR_SOURCE_OF_GROUP;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    case PanelLoader.KEY_CONTROLS.TBX_GROUPSOURCES_ADDING:
                        //case PanelLoader.KEY_CONTROLS.TBX_GROUPSIGNALS_ADDING:
                        state           = HHandlerQueue.StatesMachine.SET_TEXT_ADDING;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    case PanelLoader.KEY_CONTROLS.GROUP_BOX_GROUP_SIGNALS:
                        state           = HHandlerQueue.StatesMachine.SET_GROUP_SIGNALS_PARS;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)(pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL])
                                , (GROUP_SIGNALS_PARS)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    case PanelLoader.KEY_CONTROLS.RBUTTON_CUR_DATETIME:
                    case PanelLoader.KEY_CONTROLS.RBUTTON_COSTUMIZE:
                        state           = HHandlerQueue.StatesMachine.GET_GROUP_SIGNALS_DATETIME_PARS;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)(pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL])
                                , (string)(pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA] as object [])[0]             //Строковый идентификатор группы сигналов
                                , (MODE_WORK)(pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA] as object [])[1]          //MODE_WORK
                            }
                        };
                        break;

                    default:
                        break;
                    }
                    break;

                case INDEX_SRC.DEST:
                    switch ((PanelLoader.KEY_CONTROLS)pars[(int)PanelLoader.INDEX_PREPARE_PARS.KEY_OBJ])
                    {
                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SOURCES:
                        state           = HHandlerQueue.StatesMachine.OBJ_DEST_GROUP_SOURCES;
                        arObjToDataHost = new object[] { new object[] { (int)state, pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL] } };
                        break;

                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SIGNALS:
                        //state = ;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)HHandlerQueue.StatesMachine.OBJ_DEST_GROUP_SIGNALS_PARS
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                            , new object[] {
                                (int)HHandlerQueue.StatesMachine.OBJ_DEST_GROUP_SIGNALS
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    case PanelLoader.KEY_CONTROLS.CBX_SOURCE_OF_GROUP:
                        state           = HHandlerQueue.StatesMachine.SET_IDCUR_SOURCE_OF_GROUP;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    case PanelLoader.KEY_CONTROLS.TBX_GROUPSOURCES_ADDING:
                        //case PanelLoader.KEY_CONTROLS.TBX_GROUPSIGNALS_ADDING:
                        state           = HHandlerQueue.StatesMachine.SET_TEXT_ADDING;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    case PanelLoader.KEY_CONTROLS.GROUP_BOX_GROUP_SIGNALS:
                        state           = HHandlerQueue.StatesMachine.SET_GROUP_SIGNALS_PARS;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)(pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL])
                                , (GROUP_SIGNALS_PARS)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    default:
                        break;
                    }
                    break;

                default:
                    break;
                }
                break;

            case KEY_EVENT.CELL_CLICK:
                switch (indxWork)
                {
                case INDEX_SRC.SOURCE:
                    switch ((PanelLoader.KEY_CONTROLS)pars[(int)PanelLoader.INDEX_PREPARE_PARS.KEY_OBJ])
                    {
                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SOURCES:
                        state = HHandlerQueue.StatesMachine.STATE_CHANGED_GROUP_SOURCES;
                        break;

                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SIGNALS:
                        state = HHandlerQueue.StatesMachine.STATE_CHANGED_GROUP_SIGNALS;
                        break;

                    default:
                        break;
                    }
                    break;

                case INDEX_SRC.DEST:
                    switch ((PanelLoader.KEY_CONTROLS)pars[(int)PanelLoader.INDEX_PREPARE_PARS.KEY_OBJ])
                    {
                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SOURCES:
                        state = HHandlerQueue.StatesMachine.STATE_CHANGED_GROUP_SOURCES;
                        break;

                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SIGNALS:
                        state = HHandlerQueue.StatesMachine.STATE_CHANGED_GROUP_SIGNALS;
                        break;

                    default:
                        break;
                    }
                    break;

                default:
                    break;
                }

                arObjToDataHost = new object[] { new object []
                                                 {
                                                     (int)state
                                                     , indxWork
                                                     , pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                                     , pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                                                 } };
                break;

            case KEY_EVENT.BTN_DLL_RELOAD:
                switch (indxWork)
                {
                case INDEX_SRC.SOURCE:
                case INDEX_SRC.DEST:
                    //state = ;
                    arObjToDataHost = new object[] {
                        new object []
                        {
                            (int)HHandlerQueue.StatesMachine.COMMAND_RELAOD_GROUP_SOURCES
                            , indxWork
                            , pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                            //, pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                        }
                    };
                    break;

                default:
                    break;
                }
                break;

            case KEY_EVENT.BTN_CLEAR_CLICK:
                switch (indxWork)
                {
                case INDEX_SRC.SOURCE:         //для SOURCE удаление НЕвозможно
                    ;
                    break;

                case INDEX_SRC.DEST:
                    switch ((PanelLoader.KEY_CONTROLS)pars[(int)PanelLoader.INDEX_PREPARE_PARS.KEY_OBJ])
                    {
                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SOURCES:             // для DEST группы источников удаление НЕвозможно
                        ;
                        break;

                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SIGNALS:             // удаление возможно ТОЛЬКО для DEST группв сигналов
                        state           = HHandlerQueue.StatesMachine.CLEARVALUES_DEST_GROUP_SIGNALS;
                        arObjToDataHost = new object[] { new object []
                                                         {
                                                             (int)state
                                                             , indxWork
                                                             , pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                                             , pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                                                         } };
                        break;

                    default:
                        break;
                    }
                    break;

                default:
                    break;
                }
                break;

            default:
                break;
            }

            //Ретрансляция для постановки в очередь
            if (arObjToDataHost.Length > 0)
            {
                DataAskedHost(arObjToDataHost);
            }
            else
            {
                ;
            }
        }
Example #5
0
        /// <summary>
        /// Обработчик события получения данных по запросу (выполняется в текущем потоке)
        /// </summary>
        /// <param name="obj">Результат, полученный по запросу (массив 'object')</param>
        private void onEvtDataRecievedHost(object obj)
        {
            //Обработанное состояние
            HHandlerQueue.StatesMachine state = (HHandlerQueue.StatesMachine)Int32.Parse((obj as object[])[0].ToString());
            //Параметры (массив) в 1-ом элементе результата
            object par = (obj as object[])[1];

            switch (state)
            {
            case HHandlerQueue.StatesMachine.LIST_GROUP_SOURCES:     //Группы источников (источник)
                fillWorkItem(INDEX_SRC.SOURCE, PanelLoader.KEY_CONTROLS.DGV_GROUP_SOURCES, (par as object[])[(int)INDEX_SRC.SOURCE] as string[, ]);
                fillWorkItem(INDEX_SRC.DEST, PanelLoader.KEY_CONTROLS.DGV_GROUP_SOURCES, (par as object[])[(int)INDEX_SRC.DEST] as string[, ]);
                break;

            case HHandlerQueue.StatesMachine.OBJ_SRC_GROUP_SOURCES:     //Группа (объект) источников (источник)
                //m_arCurrentSrcItems [(int)INDEX_SRC.SOURCE] = par as ITEM_SRC;
                fillWorkItem(INDEX_SRC.SOURCE, par as GROUP_SRC);
                break;

            case HHandlerQueue.StatesMachine.OBJ_DEST_GROUP_SOURCES:     //Группа (объект) источников (назначение)
                //m_arCurrentSrcItems[(int)INDEX_SRC.DEST] = par as ITEM_SRC;
                fillWorkItem(INDEX_SRC.DEST, par as GROUP_SRC);
                break;

            case HHandlerQueue.StatesMachine.TIMER_WORK_UPDATE:
                m_iSecondUpdate = (int)par;
                startTimerUpdate();
                activeTimerUpdate(true);
                break;

            case HHandlerQueue.StatesMachine.OBJ_SRC_GROUP_SIGNALS_PARS:     //Объект с параметрами группы сигналов (источник)
                //???
                //fillWorkItem(INDEX_SRC.SOURCE, par as GROUP_SIGNALS_SRC);
                fillWorkItem(INDEX_SRC.SOURCE, par as GROUP_SIGNALS_PARS);
                break;

            case HHandlerQueue.StatesMachine.OBJ_SRC_GROUP_SIGNALS:     //Объект группы сигналов (источник)
                fillWorkItem(INDEX_SRC.SOURCE, par as GROUP_SIGNALS_SRC);
                break;

            case HHandlerQueue.StatesMachine.OBJ_DEST_GROUP_SIGNALS_PARS:     //Объект с параметрами группы сигналов (назначение)
                //???
                //fillWorkItem(INDEX_SRC.DEST, par as GROUP_SIGNALS_SRC);
                fillWorkItem(INDEX_SRC.DEST, par as GROUP_SIGNALS_PARS);
                break;

            case HHandlerQueue.StatesMachine.OBJ_DEST_GROUP_SIGNALS:     //Объект группы сигналов (назначение)
                //???
                fillWorkItem(INDEX_SRC.DEST, par as GROUP_SIGNALS_SRC);
                break;

            case HHandlerQueue.StatesMachine.STATE_GROUP_SOURCES:     //Состояние группы источников (источник, назначение)
                for (INDEX_SRC indxSrc = INDEX_SRC.SOURCE; indxSrc < INDEX_SRC.COUNT_INDEX_SRC; indxSrc++)
                {
                    enabledWorkItem(indxSrc, PanelLoader.KEY_CONTROLS.DGV_GROUP_SOURCES, (par as object[])[(int)indxSrc] as GroupSources.STATE[]);
                }
                break;

            case HHandlerQueue.StatesMachine.STATE_GROUP_SIGNALS:     //Состояние группы сигналов  (источник, назначение)
                for (INDEX_SRC indxSrc = INDEX_SRC.SOURCE; indxSrc < INDEX_SRC.COUNT_INDEX_SRC; indxSrc++)
                {
                    enabledWorkItem(indxSrc, PanelLoader.KEY_CONTROLS.DGV_GROUP_SIGNALS, (par as object[])[(int)indxSrc] as object []);
                }
                break;

            case HHandlerQueue.StatesMachine.STATE_CHANGED_GROUP_SOURCES:     //Состояние (изменено) группы источников (источник, назначение)
                //Немедленно запросить состояния групп источников
                changeTimerUpdate(0);
                break;

            case HHandlerQueue.StatesMachine.STATE_CHANGED_GROUP_SIGNALS:     //Состояние (изменено) группы сигналов (источник, назначение)
                //Немедленно запросить состояния групп сигналов
                changeTimerUpdate(0);
                break;

            case HHandlerQueue.StatesMachine.COMMAND_RELAOD_GROUP_SOURCES:     //Состояние (выгружена/загружена) группы источников (источник, назначение)
                //Немедленно запросить состояния групп источников
                changeTimerUpdate(0);
                break;

            case HHandlerQueue.StatesMachine.DATA_SRC_GROUP_SIGNALS:
                if (par == null)
                {
                    m_arLoader[(int)INDEX_SRC.SOURCE].UpdateData();
                }
                else
                {
                    m_arLoader[(int)INDEX_SRC.SOURCE].UpdateData(par as DataTable);
                }
                break;

            case HHandlerQueue.StatesMachine.DATA_DEST_GROUP_SIGNALS:
                if (par == null)
                {
                    m_arLoader[(int)INDEX_SRC.DEST].UpdateData();
                }
                else
                {
                    m_arLoader[(int)INDEX_SRC.DEST].UpdateData(par as DataTable);
                }
                break;
                break;

            //case HHandlerQueue.StatesMachine.SET_IDCUR_SOURCE_OF_GROUP:
            //    break;
            case HHandlerQueue.StatesMachine.GET_GROUP_SIGNALS_DATETIME_PARS:
                if (!(par == null))
                {
                    m_arLoader[(int)INDEX_SRC.SOURCE].FillDatetimePars(par as DATETIME_WORK);
                }
                else
                {
                    ;
                }
                break;

            default:
                break;
            }
        }
Example #6
0
        /// <summary>
        /// Обработчик события 'EvtDataAskedHost' от панелей (источник, назначение)
        /// </summary>
        /// <param name="obj">Параметр для передачи-массив (0-панель, 1-индекс группы источников, 2-индекс группы сигналов)</param>
        private void OnEvtDataAskedPanelWork_PanelLoader(object par)
        {
            object [] pars = (par as EventArgsDataHost).par[0] as object [];
            //Массив параметров для передачи
            object[] arObjToDataHost = new object [] { };
            //Событие для постановки в очередь обработки событий
            HHandlerQueue.StatesMachine state = HHandlerQueue.StatesMachine.UNKNOWN;
            //Определить панель-инициатор сообщения
            INDEX_SRC indxWork = (INDEX_SRC)this.Controls.GetChildIndex(pars[(int)PanelLoader.INDEX_PREPARE_PARS.OBJ] as PanelLoader);

            switch ((KEY_EVENT)pars[(int)PanelLoader.INDEX_PREPARE_PARS.KEY_EVT])
            {
            case KEY_EVENT.SELECTION_CHANGED:
                switch (indxWork)
                {
                case INDEX_SRC.SOURCE:
                    switch ((PanelLoader.KEY_CONTROLS)pars[(int)PanelLoader.INDEX_PREPARE_PARS.KEY_OBJ])
                    {
                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SOURCES:
                        state           = HHandlerQueue.StatesMachine.OBJ_SRC_GROUP_SOURCES;
                        arObjToDataHost = new object[] { new object[] { (int)state, pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL] } };
                        break;

                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SIGNALS:
                        state           = HHandlerQueue.StatesMachine.OBJ_SRC_GROUP_SIGNALS_PARS;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                            , new object[] {
                                (int)HHandlerQueue.StatesMachine.OBJ_SRC_GROUP_SIGNALS
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    case PanelLoader.KEY_CONTROLS.CBX_SOURCE_OF_GROUP:
                        state           = HHandlerQueue.StatesMachine.SET_IDCUR_SOURCE_OF_GROUP;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    case PanelLoader.KEY_CONTROLS.TBX_GROUPSOURCES_ADDING:
                        //case PanelLoader.KEY_CONTROLS.TBX_GROUPSIGNALS_ADDING:
                        state           = HHandlerQueue.StatesMachine.SET_TEXT_ADDING;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    default:
                        break;
                    }
                    break;

                case INDEX_SRC.DEST:
                    switch ((PanelLoader.KEY_CONTROLS)pars[(int)PanelLoader.INDEX_PREPARE_PARS.KEY_OBJ])
                    {
                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SOURCES:
                        state           = HHandlerQueue.StatesMachine.OBJ_DEST_GROUP_SOURCES;
                        arObjToDataHost = new object[] { new object[] { (int)state, pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL] } };
                        break;

                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SIGNALS:
                        state           = HHandlerQueue.StatesMachine.OBJ_DEST_GROUP_SIGNALS_PARS;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                            , new object[] {
                                (int)HHandlerQueue.StatesMachine.OBJ_DEST_GROUP_SIGNALS
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    case PanelLoader.KEY_CONTROLS.CBX_SOURCE_OF_GROUP:
                        state           = HHandlerQueue.StatesMachine.SET_IDCUR_SOURCE_OF_GROUP;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    case PanelLoader.KEY_CONTROLS.TBX_GROUPSOURCES_ADDING:
                        //case PanelLoader.KEY_CONTROLS.TBX_GROUPSIGNALS_ADDING:
                        state           = HHandlerQueue.StatesMachine.SET_TEXT_ADDING;
                        arObjToDataHost = new object[] {
                            new object[] {
                                (int)state
                                , indxWork
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                , (string)pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                            }
                        };
                        break;

                    default:
                        break;
                    }
                    break;

                default:
                    break;
                }
                break;

            case KEY_EVENT.CELL_CLICK:
                switch (indxWork)
                {
                case INDEX_SRC.SOURCE:
                    switch ((PanelLoader.KEY_CONTROLS)pars[(int)PanelLoader.INDEX_PREPARE_PARS.KEY_OBJ])
                    {
                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SOURCES:
                        state = HHandlerQueue.StatesMachine.STATE_CHANGED_GROUP_SOURCES;
                        break;

                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SIGNALS:
                        state = HHandlerQueue.StatesMachine.STATE_CHANGED_GROUP_SIGNALS;
                        break;

                    default:
                        break;
                    }
                    break;

                case INDEX_SRC.DEST:
                    switch ((PanelLoader.KEY_CONTROLS)pars[(int)PanelLoader.INDEX_PREPARE_PARS.KEY_OBJ])
                    {
                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SOURCES:
                        state = HHandlerQueue.StatesMachine.STATE_CHANGED_GROUP_SOURCES;
                        break;

                    case PanelLoader.KEY_CONTROLS.DGV_GROUP_SIGNALS:
                        state = HHandlerQueue.StatesMachine.STATE_CHANGED_GROUP_SIGNALS;
                        break;

                    default:
                        break;
                    }
                    break;

                default:
                    break;
                }

                arObjToDataHost = new object[] { new object []
                                                 {
                                                     (int)state
                                                     , indxWork
                                                     , pars[(int)PanelLoader.INDEX_PREPARE_PARS.ID_OBJ_SEL]
                                                     , pars[(int)PanelLoader.INDEX_PREPARE_PARS.DEPENDENCED_DATA]
                                                 } };
                break;

            default:
                break;
            }

            //Ретрансляция для постановки в очередь
            DataAskedHost(arObjToDataHost);
        }