派生自 development/c++

pansen
2019-03-07 d3b7bbe7102cd089680a828f5d8f6402c8cf6342
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "LoopRecordVideoI.h"
#include <basic/util/app/AppPreference.hpp>
#include <QtCore/QDateTime>
#include <uuid/uuid.h>
#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<std::mutex> 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<std::mutex> 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<std::mutex> 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;
    }
}