/// <summary> /// Обработчик события 'EvtDataAskedHostQueue' для установления взаимосвязи между "связанными" (по конф./файлу) по "цепочке" сигналов - групп сигналов - групп источников /// </summary> /// <param name="par">Параметры для установления соответствия</param> private void onEvtDataAskedHostQueue_GroupSourcesDest(object par) { EventArgsDataHost ev = par as EventArgsDataHost; object [] pars = ev.par as object []; GroupSourcesDest grpSrcDest = pars[0] as GroupSourcesDest; int indxNeededGroupSources = (int)pars[1]; foreach (GroupSources grpSrcSource in m_listGroupSources[(int)INDEX_SRC.SOURCE]) { if (FormMain.FileINI.GetIDIndex(grpSrcSource.m_strID) == indxNeededGroupSources) { if ((ID_DATA_ASKED_HOST)ev.id == ID_DATA_ASKED_HOST.START) { grpSrcSource.AddDelegatePlugInOnEvtDataAskedHost(FormMain.FileINI.GetIDIndex(grpSrcDest.m_strID), grpSrcDest.Clone_OnEvtDataAskedHost); } else if ((ID_DATA_ASKED_HOST)ev.id == ID_DATA_ASKED_HOST.STOP) { grpSrcSource.RemoveDelegatePlugInOnEvtDataAskedHost(FormMain.FileINI.GetIDIndex(grpSrcDest.m_strID), grpSrcDest.Clone_OnEvtDataAskedHost); } else { ; } break; } else { ; } } }
/// <summary> /// Обработчик события 'EvtDataAskedHostQueue' /// </summary> /// <param name="par">Параметры/аргументы события</param> private void onEvtDataAskedHostQueue_GroupSources(object par) { EventArgsDataHost ev = par as EventArgsDataHost; object [] pars = ev.par as object []; // массив параметров // id_main - индекс типа группы источников (INDEX_SRC) // id_detail - индекс группы источников (идентификатор) // 'par' различается в ~ от типа объекта в 'pars[0]' // для 'GroupSourcesSrc, GroupSourcesDest' - длина=3 (набор исходный): [0] - индекс группы сигналов, [1] - команда, [2 | при необходимости] - 'ID_HEAD_ASKED_HOST' // для 'GroupSourcesDest' - длина=2 (набор изменен): [0] - объект 'GroupSourcesDest', [1] - команда GroupSourcesDest grpSrcDest = null; // только для 2-го набора int indx = -1; // для разных наборов - различное значение ID_HEAD_ASKED_HOST idHeadAskedHost = ID_HEAD_ASKED_HOST.UNKNOWN; // только для исходного набора (для [START | STOP] всегда = 'CONFIRM') ID_DATA_ASKED_HOST id_cmd = (ID_DATA_ASKED_HOST)pars[1]; if (pars[0].GetType().IsPrimitive == true) { // действия по набору-1 indx = (int)pars[0]; // индекс группы сигналов if (pars.Length == 2) { // единственный параметр switch (id_cmd) { //case ID_DATA_ASKED_HOST.START: // add(new object [] { ev.id_main, indx }, TimeSpan.FromMilliseconds (16667)); // break; case ID_DATA_ASKED_HOST.STOP: #if _STATE_MANAGER remove(ev.id_main, ev.id_detail, indx); #endif break; case ID_DATA_ASKED_HOST.TABLE_RES: #if _STATE_MANAGER update(ev.id_main, ev.id_detail, indx); #endif break; default: break; } } else // 3 параметра if (pars.Length == 3) { if (pars[2].GetType().IsEnum == true) { //ID_DATA_ASKED_HOST.START, ID_DATA_ASKED_HOST.STOP; ID_HEAD_ASKED_HOST.CONFIRM idHeadAskedHost = (ID_HEAD_ASKED_HOST)pars[2]; if (idHeadAskedHost == ID_HEAD_ASKED_HOST.CONFIRM) #if _STATE_MANAGER { confirm(ev.id_main, ev.id_detail, indx) #else #endif ; } else { // ошибка - переменная имеет непредвиденное значение throw new MissingMemberException(@"HHandleQueue::onEvtDataAskedHostQueue_GroupSources () - ..."); } } else { //ID_DATA_ASKED_HOST.START #if _STATE_MANAGER // добавить группу сигналов в список контролируемых add(new object[] { ev.id_main, ev.id_detail, indx }, TimeSpan.FromMilliseconds(((TimeSpan)pars[2]).TotalMilliseconds)); #else #endif } } else { ; // других вариантов по количеству параметров - нет } } else {// действия по набору-2 (для установления взаимосвязи между "связанными" (по конф./файлу) по "цепочке" сигналов - групп сигналов - групп источников) if (pars[0] is GroupSourcesDest) { grpSrcDest = pars[0] as GroupSourcesDest; indx = ev.id_detail; // индекс группы источников foreach (GroupSources grpSrcSource in m_listGroupSources[(int)INDEX_SRC.SOURCE]) { if (FormMain.FileINI.GetIDIndex(grpSrcSource.m_strID) == indx) //indxNeededGroupSources { if (id_cmd == ID_DATA_ASKED_HOST.START) { grpSrcSource.AddDelegatePlugInOnEvtDataAskedHost(FormMain.FileINI.GetIDIndex(grpSrcDest.m_strID), grpSrcDest.Clone_OnEvtDataAskedHost); } else if (id_cmd == ID_DATA_ASKED_HOST.STOP) { grpSrcSource.RemoveDelegatePlugInOnEvtDataAskedHost(FormMain.FileINI.GetIDIndex(grpSrcDest.m_strID), grpSrcDest.Clone_OnEvtDataAskedHost); } else { ; } break; } else { ; } } } else { // ошибка - объект имеет неизвестный тип throw new InvalidCastException(@"HHandleQueue::onEvtDataAskedHostQueue_GroupSources () - ..."); } } }
/// <summary> /// Обработчик события 'EvtDataAskedHostQueue' /// </summary> /// <param name="par">Параметры/аргументы события</param> private void onEvtDataAskedHostQueue_GroupSources(object par) { EventArgsDataHost ev = par as EventArgsDataHost; object [] pars = ev.par as object []; // массив параметров // id_main - индекс типа группы источников (FormMain.INDEX_SRC.) // id_detail - индекс группы источников (идентификатор) // 'par' различается в ~ от типа объекта в 'pars[0]' // для 'GroupSourcesSrc, GroupSourcesDest' - длина=3 (набор исходный): [0] - индекс группы сигналов, [1] - команда, [2 | при необходимости] - 'ID_HEAD_ASKED_HOST' // для 'GroupSourcesDest' - длина=2 (набор изменен): [0] - объект 'GroupSourcesDest', [1] - команда GroupSourcesDest grpSrcDest = null; // только для 2-го набора int indx = -1; // для разных наборов - различное значение ID_HEAD_ASKED_HOST idHeadAskedHost = ID_HEAD_ASKED_HOST.UNKNOWN; // только для исходного набора (для [START | STOP] всегда = 'CONFIRM') ID_DATA_ASKED_HOST id_cmd = (ID_DATA_ASKED_HOST)pars[1]; List <int> listLinkedIndexGroupSignals; if (pars[0].GetType().IsPrimitive == true) { // действия по набору-1 indx = (int)pars[0]; // индекс группы сигналов if (pars.Length == 2) { switch (id_cmd) { //case ID_DATA_ASKED_HOST.START: // add(new object [] { ev.id_main, indx }, TimeSpan.FromMilliseconds (16667)); // break; case ID_DATA_ASKED_HOST.STOP: #if _STATE_MANAGER remove(ev.id_main, ev.id_detail, indx); #endif break; default: break; } } else // 3 параметра if (pars.Length == 3) { if (pars[2].GetType().IsPrimitive == true) { // примитивное значение - кол-во строк в таблице результата switch (id_cmd) { case ID_DATA_ASKED_HOST.TABLE_RES: #if _STATE_MANAGER update(ev.id_main, ev.id_detail, indx); // если группа сигналов группы источников принадлежит к источникам информации if ((FormMain.INDEX_SRC.)ev.id_main == FormMain.INDEX_SRC.SOURCE) { // проверить кол-во строк в таблице результата // в случае отсутствия строк, требуется обновить связанные с ней группы сигналов в группах источников назначения // т.к. самостоятельно такие группы сигналов не обновляются, что м. привести к периодической выгрузке/загрузке библиотеки if ((int)pars[2] == 0) { // искать группы сигналов в группах источников назначения, связанные с указанной в аргументе foreach (GroupSourcesDest grp in m_listGroupSources[(int)FormMain.INDEX_SRC.DEST]) { // найти в группе источников назначения такие группы сигналов, которые связаны с указанной в аргументе группой сигналов listLinkedIndexGroupSignals = grp.GetListLinkedIndexGroupSignals(ev.id_detail, indx); listLinkedIndexGroupSignals.ForEach(indxGrpSgnls => { update(FormMain.INDEX_SRC.DEST, FormMain.FileINI.GetIDIndex(grp.m_strID), indxGrpSgnls); }); } } else { ; } } else { ; } #endif break;
/// <summary> /// Обработчик события 'EvtDataAskedHostQueue' /// </summary> /// <param name="par">Параметры/аргументы события</param> private void onEvtDataAskedHostQueue_GroupSources(object par) { EventArgsDataHost ev = par as EventArgsDataHost; object [] pars = ev.par as object []; // массив параметров // id_main - индекс типа группы источников (FormMain.INDEX_SRC.) // id_detail - индекс группы источников (идентификатор) // 'par' различается в ~ от типа объекта в 'pars[0]' // для 'GroupSourcesSrc, GroupSourcesDest' - длина=3 (набор исходный): [0] - индекс группы сигналов, [1] - команда, [2 | при необходимости] - 'ID_HEAD_ASKED_HOST' // для 'GroupSourcesDest' - длина=2 (набор изменен): [0] - объект 'GroupSourcesDest', [1] - команда GroupSourcesDest grpSrcDest = null; // только для 2-го набора int indx = -1; // для разных наборов - различное значение ID_HEAD_ASKED_HOST idHeadAskedHost = ID_HEAD_ASKED_HOST.UNKNOWN; // только для исходного набора (для [START | STOP] всегда = 'CONFIRM') ID_DATA_ASKED_HOST id_cmd = (ID_DATA_ASKED_HOST)pars[1]; List <int> listLinkedIndexGroupSignals; if (pars[0].GetType().IsPrimitive == true) { // действия по набору-1 indx = (int)pars[0]; // индекс группы сигналов if (pars.Length == 2) { switch (id_cmd) { //case ID_DATA_ASKED_HOST.START: // add(new object [] { ev.id_main, indx }, TimeSpan.FromMilliseconds (16667)); // break; case ID_DATA_ASKED_HOST.STOP: #if _STATE_MANAGER remove(ev.id_main, ev.id_detail, indx); #endif break; default: break; } } else // 3 параметра if (pars.Length == 3) { if (pars[2].GetType().IsPrimitive == true) { // примитивное значение - кол-во строк в таблице результата switch (id_cmd) { case ID_DATA_ASKED_HOST.TABLE_RES: #if _STATE_MANAGER update(ev.id_main, ev.id_detail, indx); // если группа сигналов группы источников принадлежит к источникам информации if ((FormMain.INDEX_SRC)ev.id_main == FormMain.INDEX_SRC.SOURCE) { // проверить кол-во строк в таблице результата // в случае отсутствия строк, требуется обновить связанные с ней группы сигналов в группах источников назначения // т.к. самостоятельно такие группы сигналов не обновляются, что м. привести к периодической выгрузке/загрузке библиотеки if ((int)pars[2] == 0) { // искать группы сигналов в группах источников назначения, связанные с указанной в аргументе foreach (GroupSourcesDest grp in m_listGroupSources[(int)FormMain.INDEX_SRC.DEST]) { // найти в группе источников назначения такие группы сигналов, которые связаны с указанной в аргументе группой сигналов listLinkedIndexGroupSignals = grp.GetListLinkedIndexGroupSignals(ev.id_detail, indx); listLinkedIndexGroupSignals.ForEach(indxGrpSgnls => { update(FormMain.INDEX_SRC.DEST, FormMain.FileINI.GetIDIndex(grp.m_strID), indxGrpSgnls); }); } } else { ; } } else { ; } #endif break; default: break; } } else if (pars[2].GetType().IsEnum == true) { //ID_DATA_ASKED_HOST.START, ID_DATA_ASKED_HOST.STOP; ID_HEAD_ASKED_HOST.CONFIRM idHeadAskedHost = (ID_HEAD_ASKED_HOST)pars[2]; if (idHeadAskedHost == ID_HEAD_ASKED_HOST.CONFIRM) #if _STATE_MANAGER { confirm(ev.id_main, ev.id_detail, indx) #else #endif ; } else { // ошибка - переменная имеет непредвиденное значение throw new MissingMemberException(@"HHandleQueue::onEvtDataAskedHostQueue_GroupSources () - ..."); } } else //ID_DATA_ASKED_HOST.START - объект 'TimeSpan' { #if _STATE_MANAGER // добавить группу сигналов в список контролируемых add(new object[] { ev.id_main, ev.id_detail, indx }, (TimeSpan)pars[2]); #else #endif } } else { ; // других вариантов по количеству параметров - нет } } else {// действия по набору-2 (для установления взаимосвязи между "связанными" (по конф./файлу) по "цепочке" сигналов - групп сигналов - групп источников) if (pars[0] is GroupSourcesDest) { grpSrcDest = pars[0] as GroupSourcesDest; indx = ev.id_detail; // индекс "чужой-связанной" группы источников foreach (GroupSources grpSrcSource in m_listGroupSources[(int)FormMain.INDEX_SRC.SOURCE]) // можно использовать 'ev.id_main' { if (FormMain.FileINI.GetIDIndex(grpSrcSource.m_strID) == indx) //indxNeededGroupSources { if (id_cmd == ID_DATA_ASKED_HOST.START) { grpSrcSource.AddDelegatePlugInOnEvtDataAskedHost(FormMain.FileINI.GetIDIndex(grpSrcDest.m_strID), grpSrcDest.Clone_OnEvtDataAskedHost); } else if (id_cmd == ID_DATA_ASKED_HOST.STOP) { grpSrcSource.RemoveDelegatePlugInOnEvtDataAskedHost(FormMain.FileINI.GetIDIndex(grpSrcDest.m_strID), grpSrcDest.Clone_OnEvtDataAskedHost); } else { ; } break; } else { ; } } } else { // ошибка - объект имеет неизвестный тип throw new InvalidCastException(@"HHandleQueue::onEvtDataAskedHostQueue_GroupSources () - ..."); } } }