/// <summary> /// Конструктор - основной (без параметров) /// </summary> public FormMain() : base(@"IconMainxmlLoader") { int indxRow = -1; //this.Icon = this.Icon = ((System.Drawing.Icon)(new System.ComponentModel.ComponentResourceManager(typeof(FormMain)).GetObject("IconMainxmlLoader"))); InitializeComponent(); // указать идентификаторы некорым элементам интерфейса m_cbxReadSessionStart.Tag = INDEX_CONTROL.CBX_READ_SESSION_START; m_cbxReadSessionStop.Tag = INDEX_CONTROL.CBX_READ_SESSION_STOP; //// инициализировать строками статические представления - Сессия //indxRow = m_dgvStatistic.Rows.Add(); //m_dgvStatistic.Rows[indxRow].HeaderCell.Value = @"Крайний пакет"; //indxRow = m_dgvStatistic.Rows.Add(); //m_dgvStatistic.Rows[indxRow].HeaderCell.Value = @"Длительность сессии"; //indxRow = m_dgvStatistic.Rows.Add(); //m_dgvStatistic.Rows[indxRow].HeaderCell.Value = @"Принятых пакетов"; // инициализировать строками статические представления - Параметры источников для сохранения значений indxRow = m_dgvDestSetting.Rows.Add(); m_dgvDestSetting.Rows[indxRow].Tag = FileINI.INDEX_CONNECTION_SETTING.IP; m_dgvDestSetting.Rows[indxRow].HeaderCell.Value = @"Сервер"; indxRow = m_dgvDestSetting.Rows.Add(); m_dgvDestSetting.Rows[indxRow].Tag = FileINI.INDEX_CONNECTION_SETTING.NPORT; m_dgvDestSetting.Rows[indxRow].HeaderCell.Value = @"№ порт"; indxRow = m_dgvDestSetting.Rows.Add(); m_dgvDestSetting.Rows[indxRow].Tag = FileINI.INDEX_CONNECTION_SETTING.INSTANCE; m_dgvDestSetting.Rows[indxRow].HeaderCell.Value = @"Экземпляр"; indxRow = m_dgvDestSetting.Rows.Add(); m_dgvDestSetting.Rows[indxRow].Tag = FileINI.INDEX_CONNECTION_SETTING.DB_NAME; m_dgvDestSetting.Rows[indxRow].HeaderCell.Value = @"Имя БД"; indxRow = m_dgvDestSetting.Rows.Add(); m_dgvDestSetting.Rows[indxRow].Tag = FileINI.INDEX_CONNECTION_SETTING.UID; m_dgvDestSetting.Rows[indxRow].HeaderCell.Value = @"Пользователь"; indxRow = m_dgvDestSetting.Rows.Add(); m_dgvDestSetting.Rows[indxRow].Tag = FileINI.INDEX_CONNECTION_SETTING.PSWD; m_dgvDestSetting.Rows[indxRow].HeaderCell.Value = @"Пароль"; createHandlerQueue(typeof(HHandlerQueue)); (m_handler as HHandlerQueue).EvtToFormMain += new DelegateObjectFunc(onHandlerMainQueue); m_udpListener = new UDPListener(); m_udpListener.EvtDataAskedHost += new DelegateObjectFunc(udpListener_OnEvtDataAskedHost); evtUDPListenerDataAskedHost += new DelegateObjectFunc(udpListener_OnEvtDataAskedHost); m_handlerPackage = new PackageHandlerQueue(); m_handlerPackage.EvtToFormMain += onHandlerPackageQueue; m_handlerWriter = new WriterHandlerQueue(); m_handlerWriter.EvtToFormMain += onHandlerWriterQueue; //??? почемы вызов не в базовом классе initFormMainSizing(); m_timerUpdate = new System.Threading.Timer(timerUpdate_OnCallback, null, System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite); m_dgvPackageList.SelectionChanged += dgvPackageList_SelectionChanged; m_tabControlViewPackage.Selecting += tabControl_Selecting; m_tabControlViewPackage.Selected += tabControlViewPackage_Selected; m_tpageViewPackageXml.Tag = INDEX_TABPAGE_VIEW_PACKAGE.XML; m_tpageViewPackageTree.Tag = INDEX_TABPAGE_VIEW_PACKAGE.TREE; m_tpageViewPackageTableValue.Tag = INDEX_TABPAGE_VIEW_PACKAGE.TABLE_VALUE; }
/// <summary> /// Конструктор основной с параметрами /// </summary> /// <param name="dtRecieved">Мктка даты/времени получения</param> /// <param name="xmlSource">XML-документ</param> public PACKAGE(DateTime dtRecieved, XmlDocument xmlSource) { m_dtRecieved = dtRecieved; m_dtSended = DateTime.MinValue; m_state = STATE.NEW; m_xmlSource = UDPListener.CopyXmlDocument(xmlSource); m_tableParameters = new DataTable(); m_tableParameters.Columns.AddRange(new DataColumn[] { new DataColumn(@"GROUP", typeof(string)) , new DataColumn(@"PARAMETER", typeof(string)) }); m_tableValues = new DataTable(); m_tableValues.Columns.AddRange(new DataColumn[] { new DataColumn(@"GROUP", typeof(string)) , new DataColumn(@"PARAMETER", typeof(string)) , new DataColumn(@"VALUE", typeof(float)) }); m_listXmlTree = new FormMain.ListXmlTree(); m_state = STATE.PARSING; for (int i = 0; i < m_xmlSource.ChildNodes.Count; i++) { if (m_xmlSource.ChildNodes[i].NodeType == XmlNodeType.Element) { m_listXmlTree.Add(new FormMain.ListXmlTree()); m_listXmlTree.Tag = m_xmlSource.ChildNodes[i].Name; parseNode(m_xmlSource.ChildNodes[i], m_listXmlTree[m_listXmlTree.Count - 1] as FormMain.ListXmlTree); } else { ; } } m_state = STATE.PARSED; //ERROR }
/// <summary> /// Подготовить объект для отправки адресату по его запросу /// </summary> /// <param name="s">Событие - идентификатор запрашиваемой информации/операции,действия</param> /// <param name="error">Признак выполнения операции/действия по запросу</param> /// <param name="outobj">Объект для отправления адресату как результат запроса</param> /// <returns>Признак выполнения метода (дополнительный)</returns> protected override int StateCheckResponse(int s, out bool error, out object outobj) { int iRes = -1; StatesMachine state = (StatesMachine)s; PACKAGE package; XmlDocument xmlDocNew; XmlNode nodeRec; string debugMsg = string.Empty; error = true; outobj = null; ItemQueue itemQueue = null; try { switch (state) { case StatesMachine.NEW: // новый пакет iRes = 0; error = false; itemQueue = Peek; // удалить лишние пакеты removePackages(); xmlDocNew = (XmlDocument)itemQueue.Pars[1]; if (m_xmlDocRecieved == null) { m_xmlDocRecieved = UDPListener.CopyXmlDocument(xmlDocNew); } else { ; } foreach (XmlNode nodeNew in xmlDocNew.ChildNodes[1]) //[0] - header, [1] - xml { debugMsg += string.Format(@"{0}, ", nodeNew.Name); if (_dictBuildingParameterRecieved.ContainsKey(nodeNew.Name) == false) { _dictBuildingParameterRecieved.Add(nodeNew.Name, new GROUP_PARAMETER(DateTime.UtcNow)); } else { _dictBuildingParameterRecieved[nodeNew.Name].Update(false); if (_dictBuildingParameterRecieved[nodeNew.Name].IsUpdate == true) { nodeRec = m_xmlDocRecieved.ChildNodes[1].SelectSingleNode(nodeNew.Name); if (nodeRec == null) { nodeRec = m_xmlDocRecieved.CreateNode(XmlNodeType.Element, nodeNew.Name, nodeNew.NamespaceURI); nodeRec.InnerXml = nodeNew.InnerXml; m_xmlDocRecieved.ChildNodes[1].AppendChild(nodeRec); } else { //m_xmlDocRecieved.ChildNodes[1].ReplaceChild(xmlNode, node); nodeRec.InnerXml = nodeNew.InnerXml; } } else { ; } } } //Console.WriteLine(string.Format(@"{0} получены: {1}", DateTime.UtcNow, debugMsg)); lock (this) { if (_dictBuildingParameterRecieved.IsUpdate == true) { error = (iRes = addPackage((DateTime)itemQueue.Pars[0], m_xmlDocRecieved)) < 0 ? true : false; _dictBuildingParameterRecieved.Update(true); } else { error = false; } } break; case StatesMachine.LIST_PACKAGE: // список пакетов iRes = 0; error = false; itemQueue = Peek; outobj = listViewPackageItem; break; case StatesMachine.PACKAGE_CONTENT: // пакет iRes = 0; error = false; itemQueue = Peek; Console.WriteLine(string.Format(@"{0} - Запрос {1}: за [{2}], индекс={3}, состояние={4}" // , DateTime.UtcNow, state.ToString(), (DateTime)itemQueue.Pars[0], (int)itemQueue.Pars[2], ((DataGridViewElementStates)itemQueue.Pars[3]).ToString())); // var selectPackages = from p in _listPackage where p.m_dtRecieved == (DateTime)itemQueue.Pars[0] select p; if (selectPackages.Count() == 1) { package = selectPackages.ElementAt(0); switch ((FormMain.INDEX_CONTROL)itemQueue.Pars[1]) { case FormMain.INDEX_CONTROL.TABPAGE_VIEW_PACKAGE_XML: outobj = package.m_xmlSource; break; case FormMain.INDEX_CONTROL.TABPAGE_VIEW_PACKAGE_TREE: outobj = package.m_listXmlTree; break; case FormMain.INDEX_CONTROL.TABPAGE_VIEW_PACKAGE_TABLE_VALUE: outobj = package.m_tableValues; break; case FormMain.INDEX_CONTROL.TABPAGE_VIEW_PACKAGE_TABLE_PARAMETER: outobj = package.m_tableParameters; break; default: //??? - ошибка неизвестный тип вкладки просмотра XML-документа break; } } else { ; //??? - ошибка пакет не найден либо пакетов много } break; case StatesMachine.STATISTIC: // статистика iRes = 0; error = false; itemQueue = Peek; //outobj = ??? объект статический break; case StatesMachine.OPTION: iRes = 0; error = false; itemQueue = Peek; s_Option = (OPTION)itemQueue.Pars[0]; m_manualEventSetOption.Set(); //outobj = ??? только в одну сторону: форма -> handler break; case StatesMachine.TIMER_TABLERES: // срок отправлять очередной пакет iRes = 0; error = false; itemQueue = Peek; // отправить строго крайний, при этом XML-пакет д.б. не отправленным var orderPckages = from p in _listPackage /*where p.m_dtSended == DateTime.MinValue*/ orderby p.m_dtRecieved descending select p; if (orderPckages.Count() > 0) { package = orderPckages.ElementAt(0); if (package.m_dtSended == DateTime.MinValue) { package.m_dtSended = DateTime.UtcNow; // объект со структурой DATA_SET outobj = new object[] { package.m_dtSended , package.m_tableValues.Copy() , package.m_tableParameters.Copy() }; } else { // не отправлять пакет на обработку outobj = false; } } else { //??? - ошибка пакет не найден либо пакетов много // iRes = -1; // error = true; outobj = false; } _dictBuildingParameterRecieved.Update(false); break; default: break; } } catch (Exception e) { Logging.Logg().Exception(e, @"PackageHandlerQueue::StateCheckResponse (state=" + state.ToString() + @") - ...", Logging.INDEX_MESSAGE.NOT_SET); error = true; iRes = -1 * (int)state; } return(iRes); }