#include "stdafx.h" #include "kernel.h" #include "sharedefine.h" CAlarmEvent::CAlarmEvent() { GetLocalTime(&time); } ///////////////////////////////////////////////////////////////////////////// CEventServer::CEventServer() { InitializeCriticalSection( &m_cs ); } CEventServer::~CEventServer() { DeleteCriticalSection( &m_cs ); } void CEventServer::AddNewEvent(CAlarmEvent* event) { EnterCriticalSection( &m_cs ); eventList.AddHead(event); LeaveCriticalSection( &m_cs ); } CAlarmEvent* CEventServer::GetUnconfirmEvent() { //POSITION pos = eventList.GetTailPosition(); //while( pos != NULL ) //{ // CAlarmEvent* event= eventList.GetPrev(pos); // //SYSTEMTIME st; // //GetLocalTime( &st ); // //CTime time1(st); // //CTime time2(event->time); // //CTimeSpan spantime = time1 - time2; // //int nSecNum = spantime.GetSeconds() + spantime.GetMinutes()*60 + spantime.GetHours()*60*60; // if( (0==event->nConfirm || 2==event->nConfirm) )//&& nSecNum >= event->nIdentifyTime ) // { // return event; // } // //if( 0==event->nConfirm || 2==event->nConfirm) // //{ // // return event; // //} //} return NULL; } void CEventServer::SetEventStatus2Config( CString strDevUid, int nVarID,int nAlarmIndex ) { POSITION pos = eventList.GetTailPosition(); while( pos != NULL ) { CAlarmEvent* event= eventList.GetPrev(pos); if( event->strUid==strDevUid && event->nVarID==nVarID && event->nAlarmIndex==nAlarmIndex && event->nDealStatus!=3 ) { //LOG4C((LOG_NOTICE, "ProcessAlarmConfirm pDevUid = %s,nVarID = %d, nAlarmIndex = %d ", strDevUid,nVarID,nAlarmIndex )); event->nDealStatus = 3; break; } } } CAlarmEvent* CEventServer::GetUnconfirmEventForLoopPlaySound( CAlarmEvent *pEvent ) { //bool bFirst=false; //POSITION pos = eventList.GetTailPosition(); //while( pos != NULL ) //{ // CAlarmEvent* event= eventList.GetPrev(pos); // //SYSTEMTIME st; // //GetLocalTime( &st ); // //CTime time1(st); // //CTime time2(event->time); // //CTimeSpan spantime = time1 - time2; // //int nSecNum = spantime.GetSeconds() + spantime.GetMinutes()*60 + spantime.GetHours()*60*60; // if( pEvent ) // { // if( pEvent->nVarID==event->nVarID ) // { // bFirst = true; // } // else if( bFirst )//&& (0==event->nConfirm || 2==event->nConfirm) && nSecNum >= event->nIdentifyTime ) // { // return event; // } // } // else // { // if( (0==event->nConfirm || 2==event->nConfirm) )//&& nSecNum >= event->nIdentifyTime ) // { // return event; // } // } // Sleep( 200 ); //} ////下面是找到了pEvent这个事件,但后面的没有满足条件的,所以要从头开始找 //if( bFirst ) //{ // pos = eventList.GetTailPosition(); // while( pos != NULL ) // { // CAlarmEvent* event= eventList.GetPrev(pos); // //SYSTEMTIME st; // //GetLocalTime( &st ); // //CTime time1(st); // //CTime time2(event->time); // //CTimeSpan spantime = time1 - time2; // //int nSecNum = spantime.GetSeconds() + spantime.GetMinutes()*60 + spantime.GetHours()*60*60; // if( (0==event->nConfirm || 2==event->nConfirm) )//&& nSecNum >= event->nIdentifyTime ) // { // return event; // } // Sleep( 200 ); // } //} return NULL; } CAlarmEvent* CEventServer::GetNewEvent() { POSITION pos = eventList.GetTailPosition(); while( pos != NULL ) { CAlarmEvent* event= eventList.GetPrev(pos); //SYSTEMTIME st; //GetLocalTime( &st ); //CTime time1(st); //CTime time2(event->time); //CTimeSpan spantime = time1 - time2; //int nSecNum = spantime.GetSeconds() + spantime.GetMinutes()*60 + spantime.GetHours()*60*60; //if( nSecNum >= event->nIdentifyTime && if( 0==event->nGet ) { //LOG4C((LOG_NOTICE, "报警内容:%s 辨识时间:%d", event->strContent,event->nIdentifyTime)); //GetLocalTime( &event->time ); event->nGet = true; return event; } //LOG4C((LOG_NOTICE, "%s %d %d ", event->strContent,nSecNum,event->nIdentifyTime )); //if( !event->bGet ) //{ // event->bGet = true; // return event; //} } return NULL; } void CEventServer::DeleteOneEvent( CString strUid, int nVarID, int nStatus ) { EnterCriticalSection( &m_cs ); POSITION pos = eventList.GetHeadPosition(); while( pos != NULL ) { POSITION pos1 = pos; CAlarmEvent* event= eventList.GetNext(pos); if( !event->strUid.Compare(strUid) && event->nVarID == nVarID && event->nStatus == nStatus ) { delete event; eventList.RemoveAt(pos1); break; } } LeaveCriticalSection( &m_cs ); } void CEventServer::DeleteOneEvent( int iIndex ) { EnterCriticalSection( &m_cs ); int nIndex=0; POSITION pos = eventList.GetTailPosition(); while( pos != NULL ) { POSITION pos1 = pos; CAlarmEvent* event= eventList.GetPrev(pos); if( iIndex==nIndex ) { delete event; eventList.RemoveAt(pos1); break; } nIndex++; } LeaveCriticalSection( &m_cs ); } void CEventServer::ClearAllEvent() { EnterCriticalSection( &m_cs ); POSITION pos = eventList.GetHeadPosition(); while(pos!=NULL) { POSITION pos1 = pos; CAlarmEvent* pEvent = eventList.GetNext(pos); if (pEvent) { delete pEvent; eventList.RemoveAt(pos1); } } LeaveCriticalSection( &m_cs ); } CAlarmEvent* CEventServer::GetOneEvent( int iIndex ) { CAlarmEvent* eventRet = NULL; EnterCriticalSection( &m_cs ); int nIndex=0; POSITION pos = eventList.GetTailPosition(); while( pos != NULL ) { CAlarmEvent* event= eventList.GetPrev(pos); if( iIndex==nIndex ) { eventRet = event; break; } nIndex++; } LeaveCriticalSection( &m_cs ); return eventRet; } void CEventServer::SetOneEventInfo( int iIndex,int nIsSound,int nColor ) { EnterCriticalSection( &m_cs ); int nIndex=0; POSITION pos = eventList.GetTailPosition(); while( pos != NULL ) { CAlarmEvent* event= eventList.GetPrev(pos); if( iIndex==nIndex ) { break; } nIndex++; } LeaveCriticalSection( &m_cs ); } void CEventServer::AddAlarmEvent( CString strDevUid, int nVarID,int nStatus,CString strContent, double dbParaValue, int nUpperLimit,int nLowerLimit, int nNormalState,int nAlarmState,int nWarningLevel, int nAlarmIndex,int nNoticeDelay,CString strWarningTime ) { //LOG4C((LOG_NOTICE, "AddAlarmEvent %s",strContent)); CAlarmEvent* event=NULL; if( NULL == event ) { event = new CAlarmEvent(); GetLocalTime( &event->time ); event->nStatus = nStatus; event->strUid = strDevUid; event->nVarID = nVarID; event->dbParaValue = dbParaValue; event->nUpperLimit = nUpperLimit; event->nLowerLimit = nLowerLimit; event->nNormalState = nNormalState; event->nAlarmState = nAlarmState; event->nWarningLevel = nWarningLevel; event->strContent = strContent; event->nAlarmIndex = nAlarmIndex; event->nNoticeDelay = nNoticeDelay; event->strWarningTime = strWarningTime; event->nGet = 0; event->nDealStatus = 0; event->nSoundTimes = 0; AddNewEvent(event); } //else //{ // if( true == event->bGet )//已经显示在列表中 // { // if( strContent.Find(pVariantsManager->m_strReturnNormal) != -1 )// 恢复正常 // { // event->nIdentifyTime = nIdentifyTime; // event->strContent = strContent; // //GetLocalTime( &event->time ); // event->bGet = false;//恢复正常马上显示到列表中 // event->nConfirm = 2;//2:恢复正常 // } // else // { // if( 2==event->nConfirm || 3==event->nConfirm || 4==event->nConfirm )// // { // event->nIdentifyTime = nIdentifyTime; // event->strContent = strContent; // GetLocalTime( &event->time ); // event->bGet = false; // event->nConfirm = 0; // } // } // } // else//还未显示在列表中 // { // if( strContent.Find(pVariantsManager->m_strReturnNormal) != -1 )// 恢复正常 // { // event->nIdentifyTime = nIdentifyTime; // event->strContent = strContent; // //GetLocalTime( &event->time ); // event->bGet = true;//未到辨别时间恢复则假设已经显示在列表中 // event->nConfirm = 4;//4:未到辨别时间恢复正常 // } // else // { // if( 2==event->nConfirm || 3==event->nConfirm || 4==event->nConfirm )// // { // event->nIdentifyTime = nIdentifyTime; // event->strContent = strContent; // GetLocalTime( &event->time ); // event->bGet = false; // event->nConfirm = 0; // } // } // } //} } void CEventServer::Validate(bool valid) { m_bValid = valid; }