EventManager.cpp 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. #include "stdafx.h"
  2. #include "kernel.h"
  3. //#include "sharedefine.h"
  4. CAlarmEvent::CAlarmEvent()
  5. {
  6. GetLocalTime(&time);
  7. }
  8. /////////////////////////////////////////////////////////////////////////////
  9. CEventServer::CEventServer()
  10. {
  11. InitializeCriticalSection( &m_cs );
  12. }
  13. CEventServer::~CEventServer()
  14. {
  15. DeleteCriticalSection( &m_cs );
  16. }
  17. void CEventServer::AddNewEvent(CAlarmEvent* event)
  18. {
  19. EnterCriticalSection( &m_cs );
  20. eventList.AddHead(event);
  21. LeaveCriticalSection( &m_cs );
  22. }
  23. CAlarmEvent* CEventServer::GetUnconfirmEvent()
  24. {
  25. //POSITION pos = eventList.GetTailPosition();
  26. //while( pos != NULL )
  27. //{
  28. // CAlarmEvent* event= eventList.GetPrev(pos);
  29. // //SYSTEMTIME st;
  30. // //GetLocalTime( &st );
  31. // //CTime time1(st);
  32. // //CTime time2(event->time);
  33. // //CTimeSpan spantime = time1 - time2;
  34. // //int nSecNum = spantime.GetSeconds() + spantime.GetMinutes()*60 + spantime.GetHours()*60*60;
  35. // if( (0==event->nConfirm || 2==event->nConfirm) )//&& nSecNum >= event->nIdentifyTime )
  36. // {
  37. // return event;
  38. // }
  39. // //if( 0==event->nConfirm || 2==event->nConfirm)
  40. // //{
  41. // // return event;
  42. // //}
  43. //}
  44. return NULL;
  45. }
  46. void CEventServer::SetEventStatus2Config( CString strDevUid, int nVarID,int nAlarmIndex )
  47. {
  48. POSITION pos = eventList.GetTailPosition();
  49. while( pos != NULL )
  50. {
  51. CAlarmEvent* event= eventList.GetPrev(pos);
  52. if( event->strUid==strDevUid && event->nVarID==nVarID && event->nAlarmIndex==nAlarmIndex && event->nDealStatus!=3 )
  53. {
  54. //LOG4C((LOG_NOTICE, "ProcessAlarmConfirm pDevUid = %s,nVarID = %d, nAlarmIndex = %d ", strDevUid,nVarID,nAlarmIndex ));
  55. event->nDealStatus = 3;
  56. break;
  57. }
  58. }
  59. }
  60. CAlarmEvent* CEventServer::GetUnconfirmEventForLoopPlaySound( CAlarmEvent *pEvent )
  61. {
  62. //bool bFirst=false;
  63. //POSITION pos = eventList.GetTailPosition();
  64. //while( pos != NULL )
  65. //{
  66. // CAlarmEvent* event= eventList.GetPrev(pos);
  67. // //SYSTEMTIME st;
  68. // //GetLocalTime( &st );
  69. // //CTime time1(st);
  70. // //CTime time2(event->time);
  71. // //CTimeSpan spantime = time1 - time2;
  72. // //int nSecNum = spantime.GetSeconds() + spantime.GetMinutes()*60 + spantime.GetHours()*60*60;
  73. // if( pEvent )
  74. // {
  75. // if( pEvent->nVarID==event->nVarID )
  76. // {
  77. // bFirst = true;
  78. // }
  79. // else if( bFirst )//&& (0==event->nConfirm || 2==event->nConfirm) && nSecNum >= event->nIdentifyTime )
  80. // {
  81. // return event;
  82. // }
  83. // }
  84. // else
  85. // {
  86. // if( (0==event->nConfirm || 2==event->nConfirm) )//&& nSecNum >= event->nIdentifyTime )
  87. // {
  88. // return event;
  89. // }
  90. // }
  91. // Sleep( 200 );
  92. //}
  93. ////下面是找到了pEvent这个事件,但后面的没有满足条件的,所以要从头开始找
  94. //if( bFirst )
  95. //{
  96. // pos = eventList.GetTailPosition();
  97. // while( pos != NULL )
  98. // {
  99. // CAlarmEvent* event= eventList.GetPrev(pos);
  100. // //SYSTEMTIME st;
  101. // //GetLocalTime( &st );
  102. // //CTime time1(st);
  103. // //CTime time2(event->time);
  104. // //CTimeSpan spantime = time1 - time2;
  105. // //int nSecNum = spantime.GetSeconds() + spantime.GetMinutes()*60 + spantime.GetHours()*60*60;
  106. // if( (0==event->nConfirm || 2==event->nConfirm) )//&& nSecNum >= event->nIdentifyTime )
  107. // {
  108. // return event;
  109. // }
  110. // Sleep( 200 );
  111. // }
  112. //}
  113. return NULL;
  114. }
  115. CAlarmEvent* CEventServer::GetNewEvent()
  116. {
  117. POSITION pos = eventList.GetTailPosition();
  118. while( pos != NULL )
  119. {
  120. CAlarmEvent* event= eventList.GetPrev(pos);
  121. //SYSTEMTIME st;
  122. //GetLocalTime( &st );
  123. //CTime time1(st);
  124. //CTime time2(event->time);
  125. //CTimeSpan spantime = time1 - time2;
  126. //int nSecNum = spantime.GetSeconds() + spantime.GetMinutes()*60 + spantime.GetHours()*60*60;
  127. //if( nSecNum >= event->nIdentifyTime &&
  128. if( 0==event->nGet )
  129. {
  130. //LOG4C((LOG_NOTICE, "报警内容:%s 辨识时间:%d", event->strContent,event->nIdentifyTime));
  131. //GetLocalTime( &event->time );
  132. event->nGet = true;
  133. return event;
  134. }
  135. //LOG4C((LOG_NOTICE, "%s %d %d ", event->strContent,nSecNum,event->nIdentifyTime ));
  136. //if( !event->bGet )
  137. //{
  138. // event->bGet = true;
  139. // return event;
  140. //}
  141. }
  142. return NULL;
  143. }
  144. void CEventServer::DeleteOneEvent( CString strUid, int nVarID, int nStatus )
  145. {
  146. EnterCriticalSection( &m_cs );
  147. POSITION pos = eventList.GetHeadPosition();
  148. while( pos != NULL )
  149. {
  150. POSITION pos1 = pos;
  151. CAlarmEvent* event= eventList.GetNext(pos);
  152. if( !event->strUid.Compare(strUid) && event->nVarID == nVarID && event->nStatus == nStatus )
  153. {
  154. delete event;
  155. eventList.RemoveAt(pos1);
  156. break;
  157. }
  158. }
  159. LeaveCriticalSection( &m_cs );
  160. }
  161. void CEventServer::DeleteOneEvent( int iIndex )
  162. {
  163. EnterCriticalSection( &m_cs );
  164. int nIndex=0;
  165. POSITION pos = eventList.GetTailPosition();
  166. while( pos != NULL )
  167. {
  168. POSITION pos1 = pos;
  169. CAlarmEvent* event= eventList.GetPrev(pos);
  170. if( iIndex==nIndex )
  171. {
  172. delete event;
  173. eventList.RemoveAt(pos1);
  174. break;
  175. }
  176. nIndex++;
  177. }
  178. LeaveCriticalSection( &m_cs );
  179. }
  180. void CEventServer::ClearAllEvent()
  181. {
  182. EnterCriticalSection( &m_cs );
  183. POSITION pos = eventList.GetHeadPosition();
  184. while(pos!=NULL)
  185. {
  186. POSITION pos1 = pos;
  187. CAlarmEvent* pEvent = eventList.GetNext(pos);
  188. if (pEvent)
  189. {
  190. delete pEvent;
  191. eventList.RemoveAt(pos1);
  192. }
  193. }
  194. LeaveCriticalSection( &m_cs );
  195. }
  196. CAlarmEvent* CEventServer::GetOneEvent( int iIndex )
  197. {
  198. CAlarmEvent* eventRet = NULL;
  199. EnterCriticalSection( &m_cs );
  200. int nIndex=0;
  201. POSITION pos = eventList.GetTailPosition();
  202. while( pos != NULL )
  203. {
  204. CAlarmEvent* event= eventList.GetPrev(pos);
  205. if( iIndex==nIndex )
  206. {
  207. eventRet = event;
  208. break;
  209. }
  210. nIndex++;
  211. }
  212. LeaveCriticalSection( &m_cs );
  213. return eventRet;
  214. }
  215. void CEventServer::SetOneEventInfo( int iIndex,int nIsSound,int nColor )
  216. {
  217. EnterCriticalSection( &m_cs );
  218. int nIndex=0;
  219. POSITION pos = eventList.GetTailPosition();
  220. while( pos != NULL )
  221. {
  222. CAlarmEvent* event= eventList.GetPrev(pos);
  223. if( iIndex==nIndex )
  224. {
  225. break;
  226. }
  227. nIndex++;
  228. }
  229. LeaveCriticalSection( &m_cs );
  230. }
  231. void CEventServer::AddAlarmEvent( CString strDevUid, int nVarID,int nStatus,CString strContent,
  232. double dbParaValue, int nUpperLimit,int nLowerLimit, int nNormalState,int nAlarmState,int nWarningLevel,
  233. int nAlarmIndex,int nNoticeDelay,CString strWarningTime )
  234. {
  235. //LOG4C((LOG_NOTICE, "AddAlarmEvent %s",strContent));
  236. CAlarmEvent* event=NULL;
  237. if( NULL == event )
  238. {
  239. event = new CAlarmEvent();
  240. GetLocalTime( &event->time );
  241. event->nStatus = nStatus;
  242. event->strUid = strDevUid;
  243. event->nVarID = nVarID;
  244. event->dbParaValue = dbParaValue;
  245. event->nUpperLimit = nUpperLimit;
  246. event->nLowerLimit = nLowerLimit;
  247. event->nNormalState = nNormalState;
  248. event->nAlarmState = nAlarmState;
  249. event->nWarningLevel = nWarningLevel;
  250. event->strContent = strContent;
  251. event->nAlarmIndex = nAlarmIndex;
  252. event->nNoticeDelay = nNoticeDelay;
  253. event->strWarningTime = strWarningTime;
  254. event->nGet = 0;
  255. event->nDealStatus = 0;
  256. event->nSoundTimes = 0;
  257. AddNewEvent(event);
  258. }
  259. //else
  260. //{
  261. // if( true == event->bGet )//已经显示在列表中
  262. // {
  263. // if( strContent.Find(pVariantsManager->m_strReturnNormal) != -1 )// 恢复正常
  264. // {
  265. // event->nIdentifyTime = nIdentifyTime;
  266. // event->strContent = strContent;
  267. // //GetLocalTime( &event->time );
  268. // event->bGet = false;//恢复正常马上显示到列表中
  269. // event->nConfirm = 2;//2:恢复正常
  270. // }
  271. // else
  272. // {
  273. // if( 2==event->nConfirm || 3==event->nConfirm || 4==event->nConfirm )//
  274. // {
  275. // event->nIdentifyTime = nIdentifyTime;
  276. // event->strContent = strContent;
  277. // GetLocalTime( &event->time );
  278. // event->bGet = false;
  279. // event->nConfirm = 0;
  280. // }
  281. // }
  282. // }
  283. // else//还未显示在列表中
  284. // {
  285. // if( strContent.Find(pVariantsManager->m_strReturnNormal) != -1 )// 恢复正常
  286. // {
  287. // event->nIdentifyTime = nIdentifyTime;
  288. // event->strContent = strContent;
  289. // //GetLocalTime( &event->time );
  290. // event->bGet = true;//未到辨别时间恢复则假设已经显示在列表中
  291. // event->nConfirm = 4;//4:未到辨别时间恢复正常
  292. // }
  293. // else
  294. // {
  295. // if( 2==event->nConfirm || 3==event->nConfirm || 4==event->nConfirm )//
  296. // {
  297. // event->nIdentifyTime = nIdentifyTime;
  298. // event->strContent = strContent;
  299. // GetLocalTime( &event->time );
  300. // event->bGet = false;
  301. // event->nConfirm = 0;
  302. // }
  303. // }
  304. // }
  305. //}
  306. }
  307. void CEventServer::Validate(bool valid)
  308. {
  309. m_bValid = valid;
  310. }