#include "LoopRecordVideoI.h" #include #include #include #include "jsoncpp/json/json.h" LoopRecordVideoI::LoopRecordVideoI(int interval) : TimerElement(interval),db_c(nullptr){ start(); } LoopRecordVideoI::~LoopRecordVideoI() { qDeleteAll(m_mapRecorders); if(db_c) { delete db_c; db_c=nullptr; } } ::std::string LoopRecordVideoI::addCamera(const ::std::string &index, const std::string &t_str_json, const Ice::Current &) { DBG(t_str_json); Json::Reader reader; Json::Value value; //"192.168.1.188/group1/M00/04/6C/wKgBvFuWLgeAJrdNAACdFDKB-U8853.jpg" if (reader.parse(t_str_json, value)) { // std::string filePathName = value["path"].asString(); // appPref.setStringData("user.loop.absolute.path", filePathName); std::string t_rtsp = value["rtsp"].asString(); if (m_mapRecorders.find(index) == m_mapRecorders.end()) { INFO("addCamera << " << index << " time " << AppUtil::getTimeSecString()); uuid_t t_uuid; uuid_generate(t_uuid); char str[36] = {0}; uuid_unparse(t_uuid, str); if(db_c==nullptr ) { db_c=new LDBTool; } LoopVideoRecorder *pRecorder = new LoopVideoRecorder(appPref.getLongData("user.interval.duration"), index, t_rtsp,std::string(str),db_c); //da yin luzhi wenjian ming std::lock_guard lock(m_map_mutex); m_mapRecorders[index] = pRecorder; return std::string(str); } else { INFO("re addCamera << " << index); removeCamera(index); return addCamera(index, t_str_json); } } else { ERR("Json error :: " << t_str_json); } return ""; } void LoopRecordVideoI::removeCamera(const ::std::string &index, const Ice::Current &) { if (m_mapRecorders.find(index) != m_mapRecorders.end()) { INFO("removeCamera << " << index); m_mapRecorders[index]->stopTimer(); std::lock_guard lock(m_map_mutex); if (m_mapRecorders[index] != NULL) { delete m_mapRecorders.value(index); } m_mapRecorders[index] = NULL; m_mapRecorders.remove(index); } } void LoopRecordVideoI::clearCamera(const Ice::Current &) { auto iter = m_mapRecorders.begin(); while (iter != m_mapRecorders.end()) { iter.value()->stopTimer(); delete iter.value(); iter.value() = NULL; m_mapRecorders.remove(iter.key()); ++iter; } } void LoopRecordVideoI::feedDog(const ::std::string &index, const Ice::Current &) { // INFO("feedDog"); std::lock_guard lock(m_mutex); m_mapFeedDogTime[index] = QDateTime::currentDateTime(); } void LoopRecordVideoI::timerFunc() { m_mutex.lock(); auto mapFeedDogTime = m_mapFeedDogTime; m_mutex.unlock(); auto iter = mapFeedDogTime.begin(); while (iter != mapFeedDogTime.end()) { qint64 current = QDateTime::currentDateTime().toMSecsSinceEpoch(); qint64 feedDog = iter.value().toMSecsSinceEpoch(); qint64 sub = current - feedDog; if (sub > 3000) { removeCamera(iter.key()); } ++iter; } }