#ifndef HCDOWNLOADELEMENT_XZL_201808091137 #define HCDOWNLOADELEMENT_XZL_201808091137 #include "myThread.h" #include "HCNetSDK.h" #include "HcRecord.h" #include "HcAnalysVideo.h" #include class HcDowloadElement : public mythread { using TASK_FUNCTION = std::function &)>; public: HcDowloadElement(const TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {} // HcDowloadElement(LDBTool* dbTool) : m_fileManage(dbTool) { // m_HcRecord.init("192.168.1.4", 8000, "admin", "basic123"); // } // HcDowloadElement(HcAnalysVideo *p) : m_HcAnalysVideo(p) { // m_HcRecord.init("192.168.1.4", 8000, "admin", "basic123"); // } void addDevice(const std::string strDevID, const char *ip, const unsigned short port, const char *usrname, const char *passwd) { //#todo if (m_mapHcRecord.find(strDevID) == m_mapHcRecord.end()) { m_mapHcRecord[strDevID] = new HcRecord; m_mapHcRecord[strDevID]->init(ip, port, usrname, passwd); } else { ERR("设备已存在"); } } ~HcDowloadElement() { // m_HcRecord.unInit(); for (auto item : m_mapHcRecord) { item.second->unInit(); delete (item.second); } } private: virtual void doFunc(std::shared_ptr spPacket) { if (m_mapHcRecord.find(spPacket->strDevID) == m_mapHcRecord.end()) { ERR("设备不已存在"); return; } // std::vector ret = m_HcRecord.getUsefulChans(); std::vector ret = m_mapHcRecord[spPacket->strDevID]->getUsefulChans(); NET_DVR_TIME startTime; startTime.dwYear = spPacket->startTime.Year; startTime.dwMonth = spPacket->startTime.Month; startTime.dwDay = spPacket->startTime.Day; startTime.dwHour = spPacket->startTime.Hour; startTime.dwMinute = spPacket->startTime.Minute; startTime.dwSecond = spPacket->startTime.Second; NET_DVR_TIME endTime; endTime.dwYear = spPacket->endTime.Year; endTime.dwMonth = spPacket->endTime.Month; endTime.dwDay = spPacket->endTime.Day; endTime.dwHour = spPacket->endTime.Hour; endTime.dwMinute = spPacket->endTime.Minute; endTime.dwSecond = spPacket->endTime.Second; std::string filePath; //#todo 任务按照30min的颗粒度拆分。 m_mapHcRecord[spPacket->strDevID]->downloadfiles(spPacket->strDevID.c_str(), spPacket->nChannelID, &startTime, &endTime, filePath); if (m_task_function != nullptr) { auto str = filePath.substr(0, filePath.rfind('/')); spPacket->srcPath = filePath.substr(0, filePath.rfind('/')); DBG(spPacket->srcPath); m_task_function(spPacket); } else { ERR("m_task_function == nullptr"); return; } } private: // HcRecord m_HcRecord; std::map m_mapHcRecord; TASK_FUNCTION m_task_function; // HcAnalysVideo *m_HcAnalysVideo; // loadFileManage m_fileManage; }; #endif