mrDarker
7 天以前 829fe6c6bc33d53fda9c31fd45a37e1df87befff
SourceCode/Bond/BondEq/AlarmMonitor.cpp
@@ -9,8 +9,8 @@
CAlarmMonitor::CAlarmMonitor()
{
   m_pRawData = new char[200];
   memset(m_pRawData, 0, 200);
   m_pRawData = new char[512];
   memset(m_pRawData, 0, 512);
}
@@ -49,7 +49,7 @@
   if (MONITOR_ID_ALARM != id) {
      return;
   }
   // 比较有没有变化
   if (compareData(m_pRawData, (const char*)pData, size)) {
      return;
@@ -90,12 +90,14 @@
   for (auto iter = m_mapAlarming.begin(); iter != m_mapAlarming.end();/* iter++*/) {
      if (!findAlarm(alarmIds, iter->first)) {
         // 消除警告, 同时将信息发出,以使界面显示和历史记录保存
         iter->second->alarmOff();
         LOGE("消除了警告:%s", iter->second->toString().c_str());
         SendBroadcast(&CIntent(BC_CODE_ALARM_OFF, "", iter->second));
         iter->second->release();
         CAlarm* pAlarm = iter->second;
         pAlarm->alarmOff();
         addAlarmToHistoryRecord(pAlarm);
         m_mapAlarming.erase(iter++);
         LOGE("消除了警告:%s", pAlarm->toString().c_str());
         SendBroadcast(&CIntent(BC_CODE_ALARM_OFF, "", pAlarm));
         pAlarm->release();
      }
      else {
         iter++;
@@ -159,40 +161,15 @@
void CAlarmMonitor::Serialize(CArchive& ar)
{
   /*
   if (ar.IsStoring())
   {
      Lock();
      int count = (int)m_alarms.size();
      ar << count;
      for (auto item : m_alarms) {
         item->Serialize(ar);
      }
      Unlock();
   if (ar.IsStoring()) {
   }
   else
   {
      Lock();
      int count;
      ar >> count;
      for (int i = 0; i < count; i++) {
         CAlarm* pAlarm = new CAlarm();
         pAlarm->addRef();
         pAlarm->Serialize(ar);
         AddAlarm(pAlarm);
         pAlarm->release();
      }
      Unlock();
   else {
   }
   */
}
void CAlarmMonitor::getAlarmingMap(std::map<int, CAlarm*>& alarms)
std::map<int, CAlarm*>& CAlarmMonitor::getAlarmingMap()
{
   Lock();
   alarms = m_mapAlarming;
   Unlock();
   return m_mapAlarming;
}
BOOL CAlarmMonitor::isAlarming()
@@ -201,6 +178,19 @@
   BOOL bAlarming = !m_mapAlarming.empty();
   Unlock();
   return bAlarming;
}
CAlarm* CAlarmMonitor::getActiveAlarm()
{
   Lock();
   if (m_mapAlarming.empty()) {
      Unlock();
      return nullptr;
   }
   auto iter = m_mapAlarming.begin();
   Unlock();
   return iter->second;
}
BOOL CAlarmMonitor::compareData(const char* pScrData, const char* pTarData, int len)
@@ -240,4 +230,25 @@
   }
   return FALSE;
}
void CAlarmMonitor::addAlarmToHistoryRecord(CAlarm* pAlarm)
{
   // 加入数据库
   AlarmManager::getInstance().addAlarm(
      std::to_string(pAlarm->getId()).c_str(),
      getAlarmText(pAlarm->getId()),
      CToolUnits::timeToString2(pAlarm->getOnTime()).c_str(),
      CToolUnits::timeToString2(pAlarm->getOffTime()).c_str());
}
BOOL CAlarmMonitor::addAlarming(CAlarm* pAlarm)
{
   auto iter = m_mapAlarming.find(pAlarm->getId());
   if (iter != m_mapAlarming.end()) return FALSE;
   pAlarm->addRef();
   m_mapAlarming[pAlarm->getId()] = pAlarm;
   return TRUE;
}