private string[,] GetListGroupSources(INDEX_SRC indx) { string[,] arStrRes = null; int i = -1; List <GROUP_SRC> listGroupSrc = m_arListGroupValues[(int)indx].m_listGroupSrc; arStrRes = new string[2,listGroupSrc.Count]; i = 0; foreach (GROUP_SRC grpSrc in listGroupSrc) { arStrRes[0,i] = grpSrc.m_strID; arStrRes[1,i] = grpSrc.m_strShrName; i++; } return(arStrRes); }
/// <summary> /// Получить объект 'ITEM_SRC' по индксу панели, типу группы, индексу текущей группы /// </summary> /// <param name="indxSrc">Индекс панели</param> /// <param name="groupType">Тип группы</param> /// <param name="indxSel">Индекс выбранной группы</param> /// <returns>Объект описания элемента группы</returns> private ITEM_SRC getItemSrc(INDEX_SRC indxSrc,int groupType,string idSel) { ITEM_SRC itemSrcRes = null; SRC src = m_arListGroupValues[(int)indxSrc]; //источник/назначение //группы источников/сигналов switch (groupType) { case 0: //GROUP_SOURCES itemSrcRes = src.m_listGroupSrc[GetIDIndex(idSel)]; break; case 2: //GROUP_SIGNALS itemSrcRes = src.m_listGroupSgnlsSrc[GetIDIndex(idSel)]; break; default: break; } return(itemSrcRes); }
/// <summary> /// Поставить в очередь 1(одно) состояние - полная выгрузка/загрузки библиотеки /// </summary> /// <param name="type">Тип группы источников</param> /// <param name="idOwner">Идентификатор (индекс) группы источников</param> private void pushCommandReloadGroupSources(INDEX_SRC type, int idOwner, bool bAbort) { GroupSources grpSrc = null; ID id; string msgDebug = string.Empty; grpSrc = m_listGroupSources[(int)type].Find(g => { return(FormMain.FileINI.GetIDIndex(g.m_strID) == idOwner); }); Push(null, new object[] { new object[] { new object [] { StatesMachine.COMMAND_RELAOD_GROUP_SOURCES , type , grpSrc.m_strID } , }, }); id = new ID(new object[] { type, idOwner, -1 }); msgDebug = string.Format(@"HHandlerQueue::pushCommandReloadGroupSources ({0}) - ...", id.ToPrint()); Logging.Logg().Debug(msgDebug, Logging.INDEX_MESSAGE.NOT_SET); //Debug.WriteLine(DateTime.Now.ToString() + @"- " + msgDebug); }
/// <summary> /// Конструктор - основной /// </summary> /// <param name="nameFile">Наименование файла конфигурации</param> public FileINI(string nameFile) : base(nameFile,true) { //Получить наименования частей секций SEC_SRC_TYPES = GetMainValueOfKey(@"SEC_SRC_TYPES").Split(s_chSecDelimeters[(int)INDEX_DELIMETER.VALUES]); KEY_TREE_SRC = GetMainValueOfKey(@"KEY_TREE_SRC").Split(s_chSecDelimeters[(int)INDEX_DELIMETER.VALUES]); KEY_TREE_SGNLS = GetMainValueOfKey(@"KEY_TREE_SGNLS").Split(s_chSecDelimeters[(int)INDEX_DELIMETER.VALUES]); //Получить ключ для чтения параметров в секции KEY_PARS = GetMainValueOfKey(@"KEY_PARS"); //Получить период для обновления информации на панели "Работа" Logging.Logg().Debug(@"FileINI::ctor () - PANEL_WORK_UPDATE = " + GetMainValueOfKey(@"PANEL_WORK_UPDATE"),Logging.INDEX_MESSAGE.NOT_SET); m_iSecPanelWorkUpdate = Int32.Parse(GetMainValueOfKey(@"PANEL_WORK_UPDATE")); //if (Int32.TryParse (GetMainValueOfKey(@"PANEL_WORK_UPDATE"), out m_iSecPanelWorkUpdate) == false) // throw new Exception(@"FileINI::FileINI () - Параметр PANEL_WORK_UPDATE не удалось инициализировать ..."); //else ; //Создать все объекты, списки для значений из файла конфигурации m_arListGroupValues = new SRC [(int)INDEX_SRC.COUNT_INDEX_SRC]; for (INDEX_SRC i = INDEX_SRC.SOURCE; i < INDEX_SRC.COUNT_INDEX_SRC; i++) { m_arListGroupValues[(int)i] = new SRC(); } foreach (SRC src in m_arListGroupValues) { src.m_listGroupSrc = new List <GROUP_SRC>(); src.m_listGroupSgnlsSrc = new List <GROUP_SIGNALS_SRC>(); } if (SEC_SRC_TYPES.Length == (int)INDEX_SRC.COUNT_INDEX_SRC) { for (INDEX_SRC i = INDEX_SRC.SOURCE; i < INDEX_SRC.COUNT_INDEX_SRC; i++) { //Получить наименование секции для группы источников (в ~ от 'i') string sec = SEC_SRC_TYPES[(int)i]; //Получить словарь параметров для панели 'Источник' Dictionary <string, string> dictSecValues = getSecValues(sec); //Получить группы источников, сигналов (источник) if (!(dictSecValues == null)) { //Получить все группы источников fillGroupValues(dictSecValues, sec, KEY_TREE_SRC[(int)INDEX_KEY_SRC.GROUP_SRC], i, typeof(GROUP_SRC)); //Получить все группы сигналов fillGroupValues(dictSecValues, sec, KEY_TREE_SGNLS[(int)INDEX_KEY_SRC.GROUP_SRC], i, typeof(GROUP_SIGNALS_SRC)); } else { ; } int j = -1 , cntGrpSgnls = -1; foreach (GROUP_SRC grpSrc in m_arListGroupValues[(int)i].m_listGroupSrc) { cntGrpSgnls = grpSrc.m_listGroupSignalsPars.Count; for (j = 0; j < cntGrpSgnls; j++) { if (grpSrc.m_listGroupSignalsPars[j].m_strId.Equals(string.Empty) == false) { grpSrc.m_listGroupSignalsPars[j].m_strShrName = getItemSrc(i, grpSrc.m_listGroupSignalsPars[j].m_strId).m_strShrName; } else { ; } } } } } else { ; } }
/// <summary> /// Добавить группу и ее значения /// </summary> /// <param name="indxSrc">Индекс панели (источник, неазначение)</param> /// <param name="type">Тип группы</param> /// <param name="secGroup">Наименование для секции со значениями параметров группы</param> /// <returns>Результат выполнения</returns> private int addGroupValues(INDEX_SRC indxSrc, Type type, string shrName, string secGroup) { int iRes = 0; //Результат выполнения //Индекс типа элемента группы (источник, сигнал) INDEX_TYPE_GROUP indxTypeGroup; ////Вариант №1 //switch (typeof(type)) //{ // default: // break; //} //Вариант №2 ITEM_SRC itemSrc = null; if (type == typeof(GROUP_SRC)) {//Источник indxTypeGroup = INDEX_TYPE_GROUP.SRC; } else if (type == typeof(GROUP_SIGNALS_SRC)) { //Сигнал indxTypeGroup = INDEX_TYPE_GROUP.SIGNAL; } else { throw new Exception(@"FileINI::addGroupValues () - неизвестный тип группы: " + type.FullName); } //Добавить элемент группы switch (indxTypeGroup) { case INDEX_TYPE_GROUP.SRC: //Добавить группу источников itemSrc = new GROUP_SRC(); (itemSrc as GROUP_SRC).m_IDCurrentConnSett = GetSecValueOfKey(secGroup,@"SCUR"); (itemSrc as GROUP_SRC).m_strDLLName = GetSecValueOfKey(secGroup,@"DLL_NAME"); //Инициализировать список с параметрами для групп сигналов для группы источников (itemSrc as GROUP_SRC).m_listGroupSignalsPars = null; (itemSrc as GROUP_SRC).m_listGroupSignalsPars = new List <GROUP_SIGNALS_PARS> (); //Получить ниаменования параметров для групп сигналов List <string> pars = GetSecValueOfKey(secGroup,KEY_TREE_SGNLS[(int)INDEX_KEY_SIGNAL.GROUP_SIGNALS] + s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET] + @"PARS").Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL]).ToList <string> (); string[] vals; string key = string.Empty; int j = 0; while (true) { key = KEY_TREE_SGNLS[(int)INDEX_KEY_SIGNAL.GROUP_SIGNALS] + j.ToString(); if (isSecKey(secGroup,key) == true) { vals = GetSecValueOfKey(secGroup,key).Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL]); if (vals.Length == pars.Count) { //??? каждую итерацию будет определяться тип 'GROUP_SIGNAL_PARS' (itemSrc as GROUP_SRC).SetGroupSignalsPars(pars,vals); } else { string msg = @"FileINI::addGroupValues () - не установлены параметры для [" + secGroup + @", " + key + @"] - ..."; ////Вариант №1 - аврийно завершить загрузку - работу приложения //throw new Exception(msg); //Вариант №2 - зафиксировать ошибку - продолжить загрузку Logging.Logg().Error(msg,Logging.INDEX_MESSAGE.NOT_SET); } } else { break; } j++; } m_arListGroupValues[(int)indxSrc].m_listGroupSrc.Add(itemSrc as GROUP_SRC); break; case INDEX_TYPE_GROUP.SIGNAL: //Добавить группу сигналов itemSrc = new GROUP_SIGNALS_SRC(); //(itemSrc as GROUP_SIGNALS_SRC).m_iAutoStart = bool.Parse(GetSecValueOfKey(secGroup, @"AUTO_START")) == true ? 1 : 0; //(itemSrc as GROUP_SIGNALS_SRC).m_mode = bool.Parse(GetSecValueOfKey(secGroup, @"CUR_INTERVAL_STATE")) == true ? MODE_WORK.CUR_INTERVAL : MODE_WORK.COSTUMIZE; //if (Int32.TryParse(GetSecValueOfKey(secGroup, @"CURINTERVAL_PERIODLOCAL"), out (itemSrc as GROUP_SIGNALS_SRC).m_arWorkIntervals[(int)MODE_WORK.CUR_INTERVAL].m_iInterval) == false) // (itemSrc as GROUP_SIGNALS_SRC).m_arWorkIntervals[(int)MODE_WORK.CUR_INTERVAL].m_iInterval = -1; //else // ; //parseWorkInterval(GetSecValueOfKey(secGroup, @"COSTUMIZE_VALUE"), ref (itemSrc as GROUP_SIGNALS_SRC).m_arWorkIntervals[(int)MODE_WORK.COSTUMIZE]); m_arListGroupValues[(int)indxSrc].m_listGroupSgnlsSrc.Add(itemSrc as GROUP_SIGNALS_SRC); break; default: break; } //Проверить наличие секции if ((isSec(secGroup) == true) && (!(itemSrc == null))) { //Присвоить наименование группы элементов (источников, сигналов) itemSrc.m_strID = secGroup.Split(s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET])[1]; itemSrc.m_strShrName = shrName; string[] values //ЗначениЕ для элемента группы ,vals; //ЗначениЕ для (1-го) параметра элемента группы //Присвоить "дополнительные" значения для группы //if (typeGroup == INDEX_TYPE_GROUP.SRC) if (itemSrc is GROUP_SRC) {//Только для группы источников (itemSrc as GROUP_SRC).SetAdding(GetSecValueOfKey(secGroup,@"ADDING").Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL])); } else { ; } int j = -1; //Индекс для ключа элемента группы (источник, сигнал) в секции string key = string.Empty; //Ключ для элемента группы (источник, сигнал) в секции //Получить словарь значений секции Dictionary <string,string> dictSecValues = getSecValues(secGroup); ////ЗначениЯ для элемента группы //// только для источника, т.к. для сигнала ... (см. 'SIGNAL_SRC') //Dictionary <string, string> dictItemValues; //Проверить наличие значений в секции if (!(dictSecValues == null)) { string keyPars = (indxTypeGroup == INDEX_TYPE_GROUP.SRC ? KEY_TREE_SRC[(int)INDEX_KEY_SRC.SRC_OF_GROUP] : indxTypeGroup == INDEX_TYPE_GROUP.SIGNAL ? KEY_TREE_SGNLS[(int)INDEX_KEY_SIGNAL.SIGNAL_OF_GROUP] : string.Empty) + s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET] + KEY_PARS; //Получить наименовния параметров для элемента группы (источник, сигнал) itemSrc.m_listSKeys = GetSecValueOfKey(secGroup,keyPars).Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL]).ToList <string> (); foreach (string parName in itemSrc.m_listSKeys) { if (parName.Equals(string.Empty) == true) { throw new Exception(@"FileINI::addGroupValues (" + indxSrc.ToString() + @", " + type.AssemblyQualifiedName + @", " + secGroup + @") - ..."); } else { ; } } j = 0; //1-ый индекс == 0 while (true) { //Сфрмировать ключ элемента группы в секции switch (indxTypeGroup) { case INDEX_TYPE_GROUP.SRC: //Источник key = KEY_TREE_SRC[(int)INDEX_KEY_SRC.SRC_OF_GROUP]; break; case INDEX_TYPE_GROUP.SIGNAL: //Сигнал key = KEY_TREE_SGNLS[(int)INDEX_KEY_SIGNAL.SIGNAL_OF_GROUP]; break; default: break; } //Добавить к ключу индекс key += j.ToString(); //Проверить наличие ключа в сеекции if (isSecKey(secGroup,key) == true) { //Получить значение по ключу для элмента группы (источник, сигнал) values = GetSecValueOfKey(secGroup,key).Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL]); if (values.Length == itemSrc.m_listSKeys.Count) { switch (indxTypeGroup) { case INDEX_TYPE_GROUP.SRC: //Источник //Инициализация, если элемент группы 1-ый if ((itemSrc as GROUP_SRC).m_dictConnSett == null) { (itemSrc as GROUP_SRC).m_dictConnSett = new Dictionary <string,ConnectionSettings>(); } else { ; } (itemSrc as GROUP_SRC).m_dictConnSett.Add(KEY_TREE_SRC[(int)INDEX_KEY_SRC.SRC_OF_GROUP] + (itemSrc as GROUP_SRC).m_dictConnSett.Count ,new ConnectionSettings( Int32.Parse(values[itemSrc.m_listSKeys.IndexOf(@"ID")]) ,values[itemSrc.m_listSKeys.IndexOf(@"NAME_SHR")] ,values[itemSrc.m_listSKeys.IndexOf(@"IP")] ,Int32.Parse(values[itemSrc.m_listSKeys.IndexOf(@"PORT")]) ,values[itemSrc.m_listSKeys.IndexOf(@"DB_NAME")] ,values[itemSrc.m_listSKeys.IndexOf(@"UID")] ,values[itemSrc.m_listSKeys.IndexOf(@"PSWD*")] )); break; case INDEX_TYPE_GROUP.SIGNAL: //Сигнал //Инициализация, если элемент группы 1-ый if ((itemSrc as GROUP_SIGNALS_SRC).m_listSgnls == null) { (itemSrc as GROUP_SIGNALS_SRC).m_listSgnls = new List <SIGNAL_SRC>(); } else { ; } (itemSrc as GROUP_SIGNALS_SRC).m_listSgnls.Add(new SIGNAL_SRC()); (itemSrc as GROUP_SIGNALS_SRC).m_listSgnls[(itemSrc as GROUP_SIGNALS_SRC).m_listSgnls.Count - 1].m_arSPars = new string[values.Length]; values.CopyTo((itemSrc as GROUP_SIGNALS_SRC).m_listSgnls[(itemSrc as GROUP_SIGNALS_SRC).m_listSgnls.Count - 1].m_arSPars,0); break; default: break; } } else { //Значение по ключу не соответствует формату break; } } else { //Ключ в секции не найден break; } //Увеличить индекс элемента (источник, сигнал) j++; } } else { //Секция есть, но в ней не определен ни один источник... iRes = -1; //??? } } else { throw new Exception(@"FileINI::ctor () - addGroupValues () - группа объявлена, но значения не определены [" + secGroup + @"] ..."); } return(iRes); }
/// <summary> /// Заполнить объект группы значениями из секции файла конфигурации /// </summary> /// <param name="dictValues">Словарь значений с перечислением всех групп панели</param> /// <param name="secTarget">Наименование целевой секции панели (источник, назначение)</param> /// <param name="secPart">Часть наименования секции со значенями для группы</param> /// <param name="indxNewSrc">Индекс панели (источник, назначение)</param> /// <param name="typeNewGroup">Тип группы</param> /// <returns>Результат выполнения функции</returns> private int fillGroupValues(Dictionary <string, string> dictValues, string secTarget, string secPart, INDEX_SRC indxNewSrc, Type typeNewGroup) { int iRes = 0 //Результат , i = -1; //Номер группы string key = string.Empty; i = 0; //Получить все группы источников while (true) { //Получить часть наименования секции key = secPart + i.ToString(); if (dictValues.ContainsKey(key) == true) { //Добавить группу... addGroupValues(indxNewSrc, typeNewGroup, dictValues[key], secTarget + s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET] + key); } else { break; } //Увеличить индекс группы i++; } return(iRes); }
/// <summary> /// Обработчик события - состояние группы сигналов не актуально /// </summary> /// <param name="ev">Аргумент события</param> private void onCrashed(/*HHandlerQueue.EventCrashedArgs*/ object obj) { HHandlerQueue.EventCrashedArgs ev = obj as HHandlerQueue.EventCrashedArgs; object[] arToSend = null; // массив для аргументов состояния for (INDEX_SRC type = INDEX_SRC.SOURCE; type < INDEX_SRC.COUNT_INDEX_SRC; type++) { foreach (GroupSources grpSrc in m_listGroupSources[(int)type]) { if (grpSrc.m_iIdTypePlugInObjectLoaded == ev.m_id.m_idTypeRegistred) { switch (ev.m_state) { case STATE.CONTROLED: // группа сигналов в работе arToSend = new object[] { (int)StatesMachine.STATE_CHANGED_GROUP_SIGNALS , type , grpSrc.m_strID , grpSrc.GetIdGroupSignals(ev.m_id.m_idGroupSgnls) }; // поставить в очередь 2 состояния: последовательный останов/запуск группы сигналов Push(null, new object[] { new object[] { arToSend // для 'STOP' , arToSend // для 'START' , }, }); break; case STATE.ADDED: case STATE.REMOVED: #if _SEPARATE_APPDOMAIN // группа сигналов не получила подтверждения от библиотеки при изменении своего состояния // поставить в очередь 1 состояние - полная выгрузка/загрузки библиотеки Push(null, new object[] { new object[] { new object [] { StatesMachine.COMMAND_RELAOD_GROUP_SOURCES , type , grpSrc.m_strID } , }, }); #endif break; default: break; } type = INDEX_SRC.COUNT_INDEX_SRC; // для прерывания внешнего цикла break; // прервать внутренний цикл } else { ; } } } }
/// <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); }
/// <summary> /// Добавить группу и ее значения /// </summary> /// <param name="indxSrc">Индекс панели (источник, неазначение)</param> /// <param name="type">Тип группы</param> /// <param name="secGroup">Наименование для секции со значениями параметров группы</param> /// <returns>Результат выполнения</returns> private int addGroupValues(INDEX_SRC indxSrc,Type type,string shrName,string secGroup) { int iRes = 0; //Результат выполнения //Индекс типа элемента группы (источник, сигнал) INDEX_TYPE_GROUP indxTypeGroup; int iStartArgs = -1; //Индекс 1-го символа аргументов в формуле string msgErr = string.Empty; // строка с сообщением об ошибке string[] values //ЗначениЕ для элемента группы ,vals; //ЗначениЕ для (1-го) параметра элемента группы int j = -1; //Индекс для ключа элемента группы (источник, сигнал) в секции string keyPars = string.Empty //Ключ для элемента группы (источник, сигнал) в секции ,key = string.Empty; Dictionary <string,string> dictSecValues = null; // словарь значений секции ////Вариант №1 //switch (typeof(type)) //{ // default: // break; //} //Вариант №2 ITEM_SRC itemSrc = null; if (type == typeof(GROUP_SRC)) {//Источник indxTypeGroup = INDEX_TYPE_GROUP.SRC; } else if (type == typeof(GROUP_SIGNALS_SRC)) { //Сигнал indxTypeGroup = INDEX_TYPE_GROUP.SIGNAL; } else { throw new Exception(@"FileINI::addGroupValues () - неизвестный тип группы: " + type.FullName); } //Добавить элемент группы switch (indxTypeGroup) { case INDEX_TYPE_GROUP.SRC: //Добавить группу источников itemSrc = addGroupSources((int)indxSrc,secGroup); break; case INDEX_TYPE_GROUP.SIGNAL: //Добавить группу сигналов itemSrc = addGroupSignals((int)indxSrc); break; default: break; } //Проверить наличие секции if ((isSec(secGroup) == true) && (!(itemSrc == null))) { //Присвоить наименование группы элементов (источников, сигналов) itemSrc.m_strID = secGroup.Split(s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET])[1]; itemSrc.m_strShrName = shrName; //Присвоить "дополнительные" значения для группы //if (typeGroup == INDEX_TYPE_GROUP.SRC) if (itemSrc is GROUP_SRC) {//Только для группы источников (itemSrc as GROUP_SRC).SetAdding(GetSecValueOfKey(secGroup,@"ADDING").Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL])); } else { ; } //Получить словарь значений секции dictSecValues = getSecValues(secGroup); ////ЗначениЯ для элемента группы //// только для источника, т.к. для сигнала ... (см. 'SIGNAL_SRC') //Dictionary <string, string> dictItemValues; //Проверить наличие значений в секции if (!(dictSecValues == null)) { keyPars = (indxTypeGroup == INDEX_TYPE_GROUP.SRC ? KEY_TREE_SRC[(int)INDEX_KEY_SRC.SRC_OF_GROUP] : indxTypeGroup == INDEX_TYPE_GROUP.SIGNAL ? KEY_TREE_SGNLS[(int)INDEX_KEY_SIGNAL.SIGNAL_OF_GROUP] : string.Empty) + s_chSecDelimeters[(int)INDEX_DELIMETER.SEC_PART_TARGET] + KEY_PARS; //Получить наименовния параметров для элемента группы (источник, сигнал) itemSrc.m_listSKeys = GetSecValueOfKey(secGroup,keyPars).Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL]).ToList <string> (); foreach (string parName in itemSrc.m_listSKeys) { if (parName.Equals(string.Empty) == true) { throw new Exception(@"FileINI::addGroupValues (" + indxSrc.ToString() + @", " + type.AssemblyQualifiedName + @", " + secGroup + @") - ..."); } else { ; } } j = 0; //1-ый индекс == 0 while (true) { //Сфрмировать ключ элемента группы в секции switch (indxTypeGroup) { case INDEX_TYPE_GROUP.SRC: //Источник key = KEY_TREE_SRC[(int)INDEX_KEY_SRC.SRC_OF_GROUP]; break; case INDEX_TYPE_GROUP.SIGNAL: //Сигнал key = KEY_TREE_SGNLS[(int)INDEX_KEY_SIGNAL.SIGNAL_OF_GROUP]; break; default: break; } //Добавить к ключу индекс key += j.ToString(); //Проверить наличие ключа в сеекции if (isSecKey(secGroup,key) == true) { //Получить значение по ключу для элмента группы (источник, сигнал) values = GetSecValueOfKey(secGroup,key).Split(s_chSecDelimeters[(int)INDEX_DELIMETER.PAIR_VAL]); if (values.Length == itemSrc.m_listSKeys.Count) { switch (indxTypeGroup) { case INDEX_TYPE_GROUP.SRC: //Источник (itemSrc as GROUP_SRC).Add(KEY_TREE_SRC[(int)INDEX_KEY_SRC.SRC_OF_GROUP],values); break; case INDEX_TYPE_GROUP.SIGNAL: //Сигнал (itemSrc as GROUP_SIGNALS_SRC).Add(values); break; default: break; } } else { //Значение по ключу не соответствует формату break; } } else { //Ключ в секции не найден break; } //Увеличить индекс элемента (источник, сигнал) j++; } if (indxTypeGroup == INDEX_TYPE_GROUP.SIGNAL) { // если была добавлена группа сигналов try { if ((!((itemSrc as GROUP_SIGNALS_SRC).m_listSgnls == null)) && ((itemSrc as GROUP_SIGNALS_SRC).m_listSgnls.Count > 0)) { initGroupSignalsFormula(itemSrc as GROUP_SIGNALS_SRC,indxSrc.ToString() + @", " + type.AssemblyQualifiedName + @", " + secGroup); } else { ; // нет ни одного сигнала } } catch (Exception e) { Logging.Logg().Exception(e,@"FileINI::ctor () - addGroupValues () - ...",Logging.INDEX_MESSAGE.NOT_SET); } } else { ; } } else { //Секция есть, но в ней не определен ни один источник(сигнал)... iRes = -1; //??? } } else { throw new Exception(@"FileINI::ctor () - addGroupValues () - группа объявлена, но значения не определены [" + secGroup + @"] ..."); } return(iRes); }
/// <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); }
/// <summary> /// Заполнить значениями объект со списком групп (элементов групп) (истоников, сигналов) /// </summary> /// <param name="indxWork">Индекс панели конфигурации</param> /// <param name="indxPanel">Индекс группы элементов (элементов) на панели конфигурации</param> /// <param name="rows">Массив строк для заполнения</param> private void fillWorkItem(INDEX_SRC indxWork, PanelLoader.KEY_CONTROLS key, string[,] rows) { m_arLoader[(int)indxWork].FillWorkItem(key, rows); }
/// <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 { ; } }
/// <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; } }
/// <summary> /// "Включение"/"отключение" элементов интерфейса в зависимости от состояния (и-или параметров группы сигналов) /// </summary> /// <param name="indxWork">Индекс панели</param> /// <param name="key">Ключ элемента интерфейса</param> /// <param name="args">Массив аргументов для каждой из групп сигналов (STATE, bEnableTools)</param> private void enabledWorkItem(INDEX_SRC indxWork, PanelLoader.KEY_CONTROLS key, object [] args) { m_arLoader[(int)indxWork].EnabledWorkItem(key, args); }
/// <summary> /// "Включение"/"отключение" элементов интерфейса в зависимости от состояния /// </summary> /// <param name="indxWork">Индекс панели</param> /// <param name="key">Ключ элемента интерфейса</param> /// <param name="states">Массив состояний объектов</param> private void enabledWorkItem(INDEX_SRC indxWork, PanelLoader.KEY_CONTROLS key, GroupSources.STATE[] states) { m_arLoader[(int)indxWork].EnabledWorkItem(key, states); }
/// <summary> /// Заполнить список с информацией о группах источников /// </summary> /// <param name="indxSrc">Индекс панели</param> /// <param name="arGroupSources">Массив с информацией о группах с источниками</param> /// <param name="arGroupSignals">Массив с информацией о группах с сигналами</param> /// <returns>Признак выполнения функции</returns> private int setListGroupSources(INDEX_SRC indxSrc, GROUP_SRC[] arGroupSources, GROUP_SIGNALS_SRC[] arGroupSignals) { int iRes = 0; if (m_listGroupSources[(int)indxSrc] == null) { m_listGroupSources[(int)indxSrc] = new List <GroupSources>(); } else { ; } Type typeObjGroupSources = typeof(GroupSources); if (indxSrc == INDEX_SRC.DEST) { typeObjGroupSources = typeof(GroupSourcesDest); } else { ; } List <GROUP_SIGNALS_SRC> listGroupSignals = new List <GROUP_SIGNALS_SRC>(); GroupSources grpSrc; foreach (GROUP_SRC itemSrc in arGroupSources) { listGroupSignals.Clear(); int cnt = (itemSrc as GROUP_SRC).m_listGroupSignalsPars.Count , j = -1; for (j = 0; j < cnt; j++) { foreach (GROUP_SIGNALS_SRC itemGrooupSignals in arGroupSignals) { if (itemGrooupSignals.m_strID.Equals((itemSrc as GROUP_SRC).m_listGroupSignalsPars[j].m_strId) == true) { listGroupSignals.Add(itemGrooupSignals); break; } else { ; } } } ////Вариант №1 //grpSrc = new GroupSources(itemSrc, listGroupSignals); //Вариант №2 grpSrc = Activator.CreateInstance(typeObjGroupSources, new object[] { itemSrc, listGroupSignals }) as GroupSources; //if (indxSrc == INDEX_SRC.DEST) grpSrc.EvtDataAskedHostQueue += new DelegateObjectFunc(onEvtDataAskedHostQueue_GroupSources); //else ; m_listGroupSources[(int)indxSrc].Add(grpSrc); } return(iRes); }
protected override int StateCheckResponse(int s, out bool error, out object outobj) { int iRes = -1; StatesMachine state = (StatesMachine)s; error = true; outobj = null; ItemQueue itemQueue = null; try { switch (state) { #region LIST_GROUP_SOURCES case (int)StatesMachine.LIST_GROUP_SOURCES: error = false; outobj = new object [] { m_fileINI.ListSrcGroupSources , m_fileINI.ListDestGroupSources }; iRes = 0; break; #endregion #region LIST_GROUP_SIGNALS case StatesMachine.LIST_GROUP_SIGNALS: error = false; outobj = new object[] { m_fileINI.ListSrcGroupSignals , m_fileINI.ListDestGroupSignals }; iRes = 0; break; #endregion #region LIST_SRC_GROUP_SOURCE_ITEMS, LIST_SRC_GROUP_SOURCE_PARS, LIST_SRC_GROUP_SOURCE_PROP, LIST_SRC_GROUP_SIGNAL_ITEMS, LIST_SRC_GROUP_SIGNAL_PARS, LIST_SRC_GROUP_SIGNAL_PROP case StatesMachine.LIST_SRC_GROUP_SOURCE_ITEMS: error = false; itemQueue = Peek; outobj = //m_fileINI.GetListItemsOfGroupSource(itemQueue.Pars.ToArray()) m_fileINI.GetListItemsOfGroupSource(itemQueue.Pars.ToArray()) ; iRes = 0; break; case StatesMachine.LIST_SRC_GROUP_SOURCE_PARS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListParsOfGroupSource(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_SRC_GROUP_SOURCE_PROP: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemPropOfGroupSource(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_SRC_GROUP_SIGNAL_ITEMS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemsOfGroupSignal(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_SRC_GROUP_SIGNAL_PARS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListParsOfGroupSignal(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_SRC_GROUP_SIGNAL_PROP: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemPropOfGroupSignal(itemQueue.Pars.ToArray()); iRes = 0; break; #endregion #region LIST_DEST_GROUP_SOURCE_ITEMS, LIST_DEST_GROUP_SOURCE_PARS, LIST_DEST_GROUP_SOURCE_PROP, LIST_DEST_GROUP_SIGNAL_ITEMS, LIST_DEST_GROUP_SIGNAL_PARS, LIST_DEST_GROUP_SIGNAL_PROP case StatesMachine.LIST_DEST_GROUP_SOURCE_ITEMS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemsOfGroupSource(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_DEST_GROUP_SOURCE_PARS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListParsOfGroupSource(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_DEST_GROUP_SOURCE_PROP: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemPropOfGroupSource(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_DEST_GROUP_SIGNAL_ITEMS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemsOfGroupSignal(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_DEST_GROUP_SIGNAL_PARS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListParsOfGroupSignal(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_DEST_GROUP_SIGNAL_PROP: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemPropOfGroupSignal(itemQueue.Pars.ToArray()); iRes = 0; break; #endregion #region OBJ_SRC_GROUP_SOURCES, OBJ_DEST_GROUP_SOURCES case StatesMachine.OBJ_SRC_GROUP_SOURCES: error = false; itemQueue = Peek; //??? 0-й параметр строковый идентификатор "выбранноой" группы источников outobj = m_fileINI.GetObjectSrcGroupSources((string)itemQueue.Pars[0]); iRes = 0; break; case StatesMachine.OBJ_DEST_GROUP_SOURCES: error = false; itemQueue = Peek; //??? 0-й параметр индекс "выбранноой" группы источников outobj = m_fileINI.GetObjectDestGroupSources((string)itemQueue.Pars[0]); iRes = 0; break; #endregion #region TIMER_WORK_UPDATE case StatesMachine.TIMER_WORK_UPDATE: error = false; outobj = m_fileINI.SecondWorkUpdate; iRes = 0; break; #endregion #region OBJ_SRC_GROUP_SIGNALS_PARS, OBJ_SRC_GROUP_SIGNALS, OBJ_DEST_GROUP_SIGNALS_PARS, OBJ_DEST_GROUP_SIGNALS case StatesMachine.OBJ_SRC_GROUP_SIGNALS_PARS: error = false; itemQueue = Peek; //??? 0-й параметр идентификатор "выбранноой" группы сигналов outobj = m_fileINI.GetObjectGroupSignalsPars(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.OBJ_SRC_GROUP_SIGNALS: error = false; itemQueue = Peek; //??? 0-й параметр идентификатор "выбранноой" группы сигналов outobj = m_fileINI.GetObjectGroupSignals(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.OBJ_DEST_GROUP_SIGNALS_PARS: error = false; itemQueue = Peek; //??? 0-й параметр идентификатор "выбранноой" группы сигналов outobj = m_fileINI.GetObjectGroupSignalsPars(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.OBJ_DEST_GROUP_SIGNALS: error = false; itemQueue = Peek; //??? 0-й параметр идентификатор "выбранноой" группы сигналов outobj = m_fileINI.GetObjectGroupSignals(itemQueue.Pars.ToArray()); iRes = 0; break; #endregion #region STATE_GROUP_SOURCES, STATE_GROUP_SIGNALS case StatesMachine.STATE_GROUP_SOURCES: error = false; outobj = new object[(int)INDEX_SRC.COUNT_INDEX_SRC]; for (INDEX_SRC indxSrc = INDEX_SRC.SOURCE; indxSrc < INDEX_SRC.COUNT_INDEX_SRC; indxSrc++) { (outobj as object[])[(int)indxSrc] = new GroupSources.STATE[m_listGroupSources[(int)indxSrc].Count]; foreach (GroupSources grpSrc in m_listGroupSources[(int)indxSrc]) { ((outobj as object[])[(int)indxSrc] as GroupSources.STATE[])[m_listGroupSources[(int)indxSrc].IndexOf(grpSrc)] = grpSrc.State; } } iRes = 0; break; case StatesMachine.STATE_GROUP_SIGNALS: error = false; itemQueue = Peek; //??? 0-й параметр индекс "выбранноой" группы сигналов outobj = new object[(int)INDEX_SRC.COUNT_INDEX_SRC]; for (INDEX_SRC indxSrc = INDEX_SRC.SOURCE; indxSrc < INDEX_SRC.COUNT_INDEX_SRC; indxSrc++) { if (!((int)itemQueue.Pars[(int)indxSrc] < 0)) { (outobj as object[])[(int)indxSrc] = m_listGroupSources[(int)indxSrc][(int)itemQueue.Pars[(int)indxSrc]].GetArgGroupSignals(); } else { (outobj as object[])[(int)indxSrc] = new object [] { } } } ; iRes = 0; break; #endregion #region STATE_CHANGED_GROUP_SOURCES, STATE_CHANGED_GROUP_SIGNALS case StatesMachine.STATE_CHANGED_GROUP_SOURCES: error = false; itemQueue = Peek; iRes = m_listGroupSources[(int)((INDEX_SRC)itemQueue.Pars[0])][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])].StateChange(); break; case StatesMachine.STATE_CHANGED_GROUP_SIGNALS: error = false; itemQueue = Peek; iRes = m_listGroupSources[(int)((INDEX_SRC)itemQueue.Pars[0])][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])].StateChange((string)itemQueue.Pars[2]); break; #endregion #region COMMAND_RELAOD_GROUP_SOURCES case StatesMachine.COMMAND_RELAOD_GROUP_SOURCES: error = false; itemQueue = Peek; iRes = m_listGroupSources[(int)((INDEX_SRC)itemQueue.Pars[0])][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])].Reload(); break; #endregion #region CLEARVALUES_DEST_GROUP_SIGNALS case StatesMachine.CLEARVALUES_DEST_GROUP_SIGNALS: //[1] - идентификаторы //[2] = дата/время / продолжительность error = false; itemQueue = Peek; int idGrpSrc = FormMain.FileINI.GetIDIndex((string)(itemQueue.Pars[1] as object [])[0]) , idGrpSgnls = FormMain.FileINI.GetIDIndex((string)(itemQueue.Pars[1] as object[])[1]); DateTime dtStartDate = (DateTime)(itemQueue.Pars[2] as object[])[0]; TimeSpan tsStartTime = (TimeSpan)(itemQueue.Pars[2] as object[])[1] , tsPeriodMain = (TimeSpan)(itemQueue.Pars[2] as object[])[2]; iRes = 0; break; #endregion #region DATA_SRC_GROUP_SIGNALS, DATA_DEST_GROUP_SIGNALS case StatesMachine.DATA_SRC_GROUP_SIGNALS: case StatesMachine.DATA_DEST_GROUP_SIGNALS: error = false; itemQueue = Peek; INDEX_SRC indxGroupSrc = state == StatesMachine.DATA_SRC_GROUP_SIGNALS ? INDEX_SRC.SOURCE : state == StatesMachine.DATA_DEST_GROUP_SIGNALS ? INDEX_SRC.DEST : INDEX_SRC.COUNT_INDEX_SRC; //??? зачем проверка индекса группы источников, как это значение м.б. отрицательным (в элементе управления не выделена ни одна строка!!!) // см. 'PanelWork::fTimerUpdate ()' - из-за того, что при старте /minimize элемент управления не отображается и в нем не назначается выделенная строка if (!((int)itemQueue.Pars[0] < 0)) { outobj = m_listGroupSources[(int)indxGroupSrc][(int)itemQueue.Pars[0]].GetDataToPanel(itemQueue.Pars[1] as string, out error); } else { ; } iRes = 0; break; #endregion #region SET_IDCUR_SOURCE_OF_GROUP, SET_TEXT_ADDING, SET_GROUP_SIGNALS_PARS case StatesMachine.SET_IDCUR_SOURCE_OF_GROUP: error = false; itemQueue = Peek; m_listGroupSources[(int)itemQueue.Pars[0]][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])].m_IDCurrentConnSett = (string)itemQueue.Pars[2]; m_fileINI.UpdateParameter((int)itemQueue.Pars[0], (string)itemQueue.Pars[1], @"SCUR", (string)itemQueue.Pars[2]); iRes = 0; break; case StatesMachine.SET_TEXT_ADDING: error = false; itemQueue = Peek; (m_listGroupSources[(int)itemQueue.Pars[0]][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])] as GroupSources).SetAdding(((string)itemQueue.Pars[2]).Split(new char[] { FileINI.s_chSecDelimeters[(int)FileINI.INDEX_DELIMETER.PAIR_VAL] })); m_fileINI.UpdateParameter((int)itemQueue.Pars[0], (string)itemQueue.Pars[1], @"ADDING", (string)itemQueue.Pars[2]); iRes = 0; break; case StatesMachine.SET_GROUP_SIGNALS_PARS: error = false; itemQueue = Peek; int indxGroupSgnls = -1; GroupSources grpSrcs = (m_listGroupSources[(int)itemQueue.Pars[0]][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])] as GroupSources); indxGroupSgnls = grpSrcs.SetGroupSignalsPars(/*(string)itemQueue.Pars[2],*/ itemQueue.Pars[2] as GROUP_SIGNALS_PARS); //indxGroupSgnls = grpSrcs.getIndexGroupSignalsPars((string)itemQueue.Pars[2]); m_fileINI.UpdateParameter((int)itemQueue.Pars[0], (string)itemQueue.Pars[1], indxGroupSgnls, itemQueue.Pars[2] as GROUP_SIGNALS_PARS); iRes = 0; break; #endregion #region GET_GROUP_SIGNALS_DATETIME_PARS case StatesMachine.GET_GROUP_SIGNALS_DATETIME_PARS: error = false; itemQueue = Peek; GROUP_SIGNALS_SRC_PARS grpSgnlsPars = m_listGroupSources[(int)INDEX_SRC.SOURCE][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])].GetGroupSignalsPars((string)itemQueue.Pars[2]); outobj = grpSgnlsPars.m_arWorkIntervals[(int)itemQueue.Pars[3]]; iRes = 0; break; #endregion #region GET_INTERACTION_PARAMETERS case StatesMachine.GET_INTERACTION_PARAMETERS: error = false; itemQueue = Peek; outobj = m_fileINI.m_InteractionPars; iRes = 0; break; #endregion #region INTERACTION_EVENT case StatesMachine.INTERACTION_EVENT: error = false; itemQueue = Peek; if (itemQueue.Pars.Length > 1) { EventInteraction(new object [] { itemQueue.Pars[0], itemQueue.Pars[1] }); } else { EventInteraction(new object[] { itemQueue.Pars[0] }); } iRes = 0; break; #endregion #if _STATE_MANAGER #region OMANAGEMENT_ADD, OMANAGEMENT_REMOVE, OMANAGEMENT_CONFIRM, OMANAGEMENT_UPDATE, OMANAGEMENT_CONTROL case StatesMachine.OMANAGEMENT_ADD: iRes = 0; error = false; itemQueue = Peek; add((ID)itemQueue.Pars[0], (TimeSpan)itemQueue.Pars[1]); break; case StatesMachine.OMANAGEMENT_REMOVE: iRes = 0; error = false; itemQueue = Peek; remove((ID)itemQueue.Pars[0]); break; case StatesMachine.OMANAGEMENT_CONFIRM: iRes = 0; error = false; itemQueue = Peek; confirm((ID)itemQueue.Pars[0]); break; case StatesMachine.OMANAGEMENT_UPDATE: iRes = 0; error = false; itemQueue = Peek; update((ID)itemQueue.Pars[0]); break; case StatesMachine.OMANAGEMENT_CONTROL: iRes = 0; error = false; targetFunc(); break; #endregion #endif default: break; } } catch (Exception e) { Logging.Logg().Exception(e, @"HHandlerQueue::StateCheckResponse (state=" + state.ToString() + @") - ...", Logging.INDEX_MESSAGE.NOT_SET); error = true; iRes = -1 * (int)state; } return(iRes); }
protected override int StateCheckResponse(int s, out bool error, out object outobj) { int iRes = -1; StatesMachine state = (StatesMachine)s; error = true; outobj = null; ItemQueue itemQueue = null; try { switch (state) { case (int)StatesMachine.LIST_GROUP_SOURCES: error = false; outobj = new object [] { m_fileINI.ListSrcGroupSources , m_fileINI.ListDestGroupSources }; iRes = 0; break; case StatesMachine.LIST_SRC_GROUP_SOURCE_ITEMS: error = false; itemQueue = Peek; outobj = //m_fileINI.GetListItemsOfGroupSource(itemQueue.Pars.ToArray()) m_fileINI.GetListItemsOfGroupSource(itemQueue.Pars.ToArray()) ; iRes = 0; break; case StatesMachine.LIST_SRC_GROUP_SOURCE_PARS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListParsOfGroupSource(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_SRC_GROUP_SOURCE_PROP: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemPropOfGroupSource(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_GROUP_SIGNALS: error = false; outobj = new object[] { m_fileINI.ListSrcGroupSignals , m_fileINI.ListDestGroupSignals }; iRes = 0; break; case StatesMachine.LIST_SRC_GROUP_SIGNAL_ITEMS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemsOfGroupSignal(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_SRC_GROUP_SIGNAL_PARS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListParsOfGroupSignal(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_SRC_GROUP_SIGNAL_PROP: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemPropOfGroupSignal(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_DEST_GROUP_SOURCE_ITEMS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemsOfGroupSource(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_DEST_GROUP_SOURCE_PARS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListParsOfGroupSource(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_DEST_GROUP_SOURCE_PROP: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemPropOfGroupSource(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_DEST_GROUP_SIGNAL_ITEMS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemsOfGroupSignal(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_DEST_GROUP_SIGNAL_PARS: error = false; itemQueue = Peek; outobj = m_fileINI.GetListParsOfGroupSignal(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.LIST_DEST_GROUP_SIGNAL_PROP: error = false; itemQueue = Peek; outobj = m_fileINI.GetListItemPropOfGroupSignal(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.OBJ_SRC_GROUP_SOURCES: error = false; itemQueue = Peek; //??? 0-й параметр строковый идентификатор "выбранноой" группы источников outobj = m_fileINI.GetObjectSrcGroupSources((string)itemQueue.Pars[0]); iRes = 0; break; case StatesMachine.OBJ_DEST_GROUP_SOURCES: error = false; itemQueue = Peek; //??? 0-й параметр индекс "выбранноой" группы источников outobj = m_fileINI.GetObjectDestGroupSources((string)itemQueue.Pars[0]); iRes = 0; break; case StatesMachine.TIMER_WORK_UPDATE: error = false; outobj = m_fileINI.SecondWorkUpdate; iRes = 0; break; case StatesMachine.OBJ_SRC_GROUP_SIGNALS_PARS: error = false; itemQueue = Peek; //??? 0-й параметр идентификатор "выбранноой" группы сигналов outobj = m_fileINI.GetObjectGroupSignalsPars(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.OBJ_SRC_GROUP_SIGNALS: error = false; itemQueue = Peek; //??? 0-й параметр идентификатор "выбранноой" группы сигналов outobj = m_fileINI.GetObjectGroupSignals(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.OBJ_DEST_GROUP_SIGNALS_PARS: error = false; itemQueue = Peek; //??? 0-й параметр идентификатор "выбранноой" группы сигналов outobj = m_fileINI.GetObjectGroupSignalsPars(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.OBJ_DEST_GROUP_SIGNALS: error = false; itemQueue = Peek; //??? 0-й параметр идентификатор "выбранноой" группы сигналов outobj = m_fileINI.GetObjectGroupSignals(itemQueue.Pars.ToArray()); iRes = 0; break; case StatesMachine.STATE_GROUP_SOURCES: error = false; outobj = new object[(int)INDEX_SRC.COUNT_INDEX_SRC]; for (INDEX_SRC indxSrc = INDEX_SRC.SOURCE; indxSrc < INDEX_SRC.COUNT_INDEX_SRC; indxSrc++) { (outobj as object[])[(int)indxSrc] = new GroupSources.STATE[m_listGroupSources[(int)indxSrc].Count]; foreach (GroupSources grpSrc in m_listGroupSources[(int)indxSrc]) { ((outobj as object[])[(int)indxSrc] as GroupSources.STATE[])[m_listGroupSources[(int)indxSrc].IndexOf(grpSrc)] = grpSrc.State; } } iRes = 0; break; case StatesMachine.STATE_GROUP_SIGNALS: error = false; itemQueue = Peek; //??? 0-й параметр индекс "выбранноой" группы сигналов outobj = new object[(int)INDEX_SRC.COUNT_INDEX_SRC]; for (INDEX_SRC indxSrc = INDEX_SRC.SOURCE; indxSrc < INDEX_SRC.COUNT_INDEX_SRC; indxSrc++) { if (!((int)itemQueue.Pars[(int)indxSrc] < 0)) { (outobj as object[])[(int)indxSrc] = m_listGroupSources[(int)indxSrc][(int)itemQueue.Pars[(int)indxSrc]].GetArgGroupSignals(); } else { (outobj as object[])[(int)indxSrc] = new object [] { } } } ; iRes = 0; break; case StatesMachine.STATE_CHANGED_GROUP_SOURCES: error = false; itemQueue = Peek; iRes = m_listGroupSources[(int)((INDEX_SRC)itemQueue.Pars[0])][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])].StateChange(); break; case StatesMachine.STATE_CHANGED_GROUP_SIGNALS: error = false; itemQueue = Peek; iRes = m_listGroupSources[(int)((INDEX_SRC)itemQueue.Pars[0])][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])].StateChange((string)itemQueue.Pars[2]); break; case StatesMachine.CLEARVALUES_DEST_GROUP_SIGNALS: //[1] - идентификаторы //[2] = дата/время / продолжительность error = false; itemQueue = Peek; int idGrpSrc = FormMain.FileINI.GetIDIndex((string)(itemQueue.Pars[1] as object [])[0]) , idGrpSgnls = FormMain.FileINI.GetIDIndex((string)(itemQueue.Pars[1] as object[])[1]); DateTime dtStartDate = (DateTime)(itemQueue.Pars[2] as object[])[0]; TimeSpan tsStartTime = (TimeSpan)(itemQueue.Pars[2] as object[])[1] , tsPeriodMain = (TimeSpan)(itemQueue.Pars[2] as object[])[2]; iRes = 0; break; case StatesMachine.DATA_SRC_GROUP_SIGNALS: error = false; itemQueue = Peek; outobj = m_listGroupSources[(int)INDEX_SRC.SOURCE][(int)itemQueue.Pars[0]].GetDataToPanel(itemQueue.Pars[1] as string, out error); iRes = 0; break; case StatesMachine.DATA_DEST_GROUP_SIGNALS: error = false; itemQueue = Peek; if (!((int)itemQueue.Pars[0] < 0)) { outobj = m_listGroupSources[(int)INDEX_SRC.DEST][(int)itemQueue.Pars[0]].GetDataToPanel(itemQueue.Pars[1] as string, out error); } else { ; } iRes = 0; break; case StatesMachine.SET_IDCUR_SOURCE_OF_GROUP: error = false; itemQueue = Peek; m_listGroupSources[(int)itemQueue.Pars[0]][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])].m_IDCurrentConnSett = (string)itemQueue.Pars[2]; m_fileINI.UpdateParameter((int)itemQueue.Pars[0], (string)itemQueue.Pars[1], @"SCUR", (string)itemQueue.Pars[2]); iRes = 0; break; case StatesMachine.SET_TEXT_ADDING: error = false; itemQueue = Peek; (m_listGroupSources[(int)itemQueue.Pars[0]][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])] as GroupSources).SetAdding(((string)itemQueue.Pars[2]).Split(new char[] { FileINI.s_chSecDelimeters[(int)FileINI.INDEX_DELIMETER.PAIR_VAL] })); m_fileINI.UpdateParameter((int)itemQueue.Pars[0], (string)itemQueue.Pars[1], @"ADDING", (string)itemQueue.Pars[2]); iRes = 0; break; case StatesMachine.SET_GROUP_SIGNALS_PARS: error = false; itemQueue = Peek; int indxGroupSgnls = -1; GroupSources grpSrcs = (m_listGroupSources[(int)itemQueue.Pars[0]][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])] as GroupSources); indxGroupSgnls = grpSrcs.SetGroupSignalsPars(/*(string)itemQueue.Pars[2],*/ itemQueue.Pars[2] as GROUP_SIGNALS_PARS); //indxGroupSgnls = grpSrcs.getIndexGroupSignalsPars((string)itemQueue.Pars[2]); m_fileINI.UpdateParameter((int)itemQueue.Pars[0], (string)itemQueue.Pars[1], indxGroupSgnls, itemQueue.Pars[2] as GROUP_SIGNALS_PARS); iRes = 0; break; case StatesMachine.GET_GROUP_SIGNALS_DATETIME_PARS: error = false; itemQueue = Peek; GROUP_SIGNALS_SRC_PARS grpSgnlsPars = m_listGroupSources[(int)INDEX_SRC.SOURCE][FormMain.FileINI.GetIDIndex((string)itemQueue.Pars[1])].GetGroupSignalsPars((string)itemQueue.Pars[2]); outobj = grpSgnlsPars.m_arWorkIntervals[(int)itemQueue.Pars[3]]; iRes = 0; break; default: break; } } catch (Exception e) { Logging.Logg().Exception(e, @"HHandlerQueue::StateCheckResponse (state=" + state.ToString() + @") - ...", Logging.INDEX_MESSAGE.NOT_SET); error = true; iRes = -1 * (int)state; } return(iRes); }