protected override int StateResponse(int state,object obj) { int iRes = 0; DataTable table = obj as DataTable; //string msg = @"HHandlerDbULoaderDest::StateResponse () ::" + ((StatesMachine)state).ToString() + @" - " // + @"[" + PlugInId + @", key=" + m_IdGroupSignalsCurrent + @"] "; try { switch (state) { case (int)StatesMachine.Values: //msg =+ @"Ok ..."; //Logging.Logg().Debug(@"Получено строк [" + PlugInId + @", key=" + IdGroupSignalsCurrent + @"]: " + (table as DataTable).Rows.Count, Logging.INDEX_MESSAGE.NOT_SET); if (TableRecieved == null) { TableRecieved = new DataTable(); } else { ; } TableRecieved = GroupSignals.clearDupValues(table); break; default: break; } } catch (Exception e) { Logging.Logg().Exception(e,Logging.INDEX_MESSAGE.NOT_SET,@"HHandlerDbULoader::StateResponse (::" + ((StatesMachine)state).ToString() + @") - ..."); } //Logging.Logg().Debug(msg, Logging.INDEX_MESSAGE.NOT_SET); //Console.WriteLine (msg); return(iRes); }
protected override int StateResponse(int state,object obj) { int iRes = 0; DataTable table = obj as DataTable; string msg = string.Empty; try { switch (state) { case (int)StatesMachine.CurrentTime: m_dtServer = (DateTime)(table as DataTable).Rows[0][0]; //msg =+ @"DATETIME=" + m_dtServer.ToString(@"dd.MM.yyyy HH.mm.ss.fff") + @"..."; break; case (int)StatesMachine.Values: RowCountRecieved = table.Rows.Count; //msg = @"Получено строк [" + PlugInId + @", key=" + IdGroupSignalsCurrent + @"]: " + (table as DataTable).Rows.Count; //Console.WriteLine (msg); //Logging.Logg().Debug(msg, Logging.INDEX_MESSAGE.NOT_SET); if (TableRecieved == null) { TableRecieved = new DataTable(); } else { ; } //int iPrev = -1, iDupl = -1, iAdd = -1, iCur = -1; //iPrev = 0; iDupl = 0; iAdd = 0; iCur = 0; //iPrev = TableResults.Rows.Count; //if (results.Rows.Count == 0) //{ // results = table.Copy (); //} //else // ; //!!! Перенесена в библ. для "вставки" ////Удалить из таблицы записи, метки времени в которых, совпадают с метками времени в таблице-рез-те предыдущего опроса //iDupl = clearDupValues (ref table); ////!!! Перенесена в библ. для "вставки" ////Сформировать таблицу с "новыми" данными //DataTable tableIns = getTableIns(ref table); //tableIns.Columns.Add(@"tmdelta", typeof(int)); //iAdd = table.Rows.Count; //TableResults.Merge(table); //iCur = TableResults.Rows.Count; //Console.WriteLine(@"Объединение таблицы-рез-та: [было=" + iPrev + @", дублирущих= " + iDupl + @", добавлено=" + iAdd + @", стало=" + iCur + @"]"); TableRecieved = GroupSignals.clearDupValues(table); break; default: break; } } catch (Exception e) { Logging.Logg().Exception(e,Logging.INDEX_MESSAGE.NOT_SET,@"HHandlerDbULoader::StateResponse (::" + ((StatesMachine)state).ToString() + @") - ..."); } //Logging.Logg().Debug(msg, Logging.INDEX_MESSAGE.NOT_SET); //Console.WriteLine (msg); return(iRes); }
public SIGNALDest(GroupSignals parent,int idMain,int idLink) : base(parent,idMain,string.Empty) // 2-й параметр может указывать на формулу, но в 'Dest' формулы пока не предусмотрены { this.m_idLink = idLink; }
public SIGNALStatKKSNAMEsql(GroupSignals parent,int idMain,int idLink,string statKKSName) : base(parent,idMain,idLink) { m_strStatKKSName = statKKSName; }
public SIGNALIDsql(GroupSignals parent,int idMain,int idLink,int idTarget) : base(parent,idMain,idLink) { m_idTarget = idTarget; }
/// <summary> /// Потоковая функция очереди обработки объектов с событиями /// </summary> private void fThreadQueue() { bool bRes = false; while (!(threadQueueIsWorking < 0)) { bRes = false; //Проверить наличие объектов для обработки lock (m_lockQueue) { bRes = QueueCount > 0; } if (bRes == false) { //Ожидать когда появятся объекты для обработки //bRes = m_semaQueue.WaitOne(); bRes = m_autoResetEvtQueue.WaitOne(); } else { ; //Начать обработку немедленно } while (true) { lock (m_lockQueue) { if (QueueCount == 0) { //Прервать, если обработаны все объекты break; } else { ; } } //Получить объект очереди событий m_IdGroupSignalsCurrent = m_queueIdGroupSignals.Peek(); State = GroupSignals.STATE.ACTIVE; //Logging.Logg().Debug(@"HHandlerDbULoader::fThreadQueue () - начало обработки группы событий очереди (ID_PLUGIN=" + (_iPlugin as PlugInBase)._Id + @", ID_GSGNLS=" + m_IdGroupSignalsCurrent + @")", Logging.INDEX_MESSAGE.NOT_SET); lock (m_lockState) { //Очистить все состояния ClearStates(); //Добавить все состояния addAllStates(); } //Обработать все состояния Run(@"HHandlerDbULoader::fThreadQueue ()"); //Ожидать обработки всех состояний m_waitHandleState[(int)INDEX_WAITHANDLE_REASON.SUCCESS].WaitOne(System.Threading.Timeout.Infinite); lock (m_lockQueue) { //Удалить объект очереди событий (обработанный) m_queueIdGroupSignals.Dequeue(); } GroupSignals.STATE newState = GroupSignals.NewState(Mode,State); lock (m_lockStateGroupSignals) { State = newState; } ((PlugInBase)_iPlugin).DataAskedHost(getDataAskedHost()); //Logging.Logg().Debug(@"HHandlerDbULoader::fThreadQueue () - окончание обработки группы событий очереди (ID_PLUGIN=" + (_iPlugin as PlugInBase)._Id + @", ID_GSGNLS=" + m_IdGroupSignalsCurrent + @")", Logging.INDEX_MESSAGE.NOT_SET); try { m_IdGroupSignalsCurrent = -1; } catch (Exception e) { Logging.Logg().Exception(e,Logging.INDEX_MESSAGE.NOT_SET,@"HHandlerDbULoader.fThreadQueue () - ..."); } } } //Освободить ресурс ядра ОС //??? "везде" 'true' if (bRes == true) { try { //m_semaQueue.Release(1); m_autoResetEvtQueue.Reset(); } catch (Exception e) { //System.Threading.SemaphoreFullException Logging.Logg().Exception(e,Logging.INDEX_MESSAGE.NOT_SET,"HHandlerDbULoader::fThreadQueue () - semaState.Release(1)"); } } else { ; } }