| | |
| | | |
| | | CAlarmMonitor::CAlarmMonitor() |
| | | { |
| | | m_pRawData = new char[200]; |
| | | memset(m_pRawData, 0, 200); |
| | | m_pRawData = new char[512]; |
| | | memset(m_pRawData, 0, 512); |
| | | } |
| | | |
| | | |
| | |
| | | if (MONITOR_ID_ALARM != id) { |
| | | return; |
| | | } |
| | | |
| | | |
| | | // 比较有没有变化 |
| | | if (compareData(m_pRawData, (const char*)pData, size)) { |
| | | return; |
| | |
| | | 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++; |
| | |
| | | |
| | | void CAlarmMonitor::Serialize(CArchive& ar) |
| | | { |
| | | /* |
| | | if (ar.IsStoring()) |
| | | { |
| | | Lock(); |
| | | int count = (int)m_alarms.size(); |
| | | int count = (int)m_mapAlarming.size(); |
| | | ar << count; |
| | | for (auto item : m_alarms) { |
| | | item->Serialize(ar); |
| | | for (auto item : m_mapAlarming) { |
| | | item.second->Serialize(ar); |
| | | } |
| | | Unlock(); |
| | | } |
| | |
| | | CAlarm* pAlarm = new CAlarm(); |
| | | pAlarm->addRef(); |
| | | pAlarm->Serialize(ar); |
| | | AddAlarm(pAlarm); |
| | | addAlarming(pAlarm); |
| | | pAlarm->release(); |
| | | |
| | | } |
| | | Unlock(); |
| | | } |
| | | */ |
| | | } |
| | | |
| | | 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() |
| | |
| | | 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) |
| | |
| | | } |
| | | |
| | | 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; |
| | | } |