From 9a0afe1ccce6fd3a6882b4c19b72cee579a54dd1 Mon Sep 17 00:00:00 2001
From: xuxiuxi <554325746@qq.com>
Date: 星期五, 08 三月 2019 12:57:51 +0800
Subject: [PATCH] find channel list bug

---
 QiaoJiaSystem/StructureApp/HiredisTool.cpp |  413 +++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 237 insertions(+), 176 deletions(-)

diff --git a/QiaoJiaSystem/StructureApp/HiredisTool.cpp b/QiaoJiaSystem/StructureApp/HiredisTool.cpp
index 2094325..c2b2422 100644
--- a/QiaoJiaSystem/StructureApp/HiredisTool.cpp
+++ b/QiaoJiaSystem/StructureApp/HiredisTool.cpp
@@ -4,40 +4,38 @@
 #include <jsoncpp/json/json.h>
 #include <basic/debug/Debug.h>
 #include <basic/util/app/AppConfig.h>
-HiredisTool::HiredisTool():
-m_redis(nullptr),
-m_nImgListLen(0)
-{
+
+HiredisTool::HiredisTool() :
+    m_redis(nullptr),
+    m_nImgListLen(0) {
     init();
 }
-HiredisTool::~HiredisTool()
-{
-    if(m_redis != nullptr)
-    {
+
+HiredisTool::~HiredisTool() {
+    if (m_redis != nullptr) {
         redisFree(m_redis);//鏋愭瀯鍑芥暟閲婃斁璧勬簮
-        DBG("~RedisTool :: free redis connection ") ;
+        DBG("~RedisTool :: free redis connection ");
     }
 
 }
 
-void HiredisTool::init()
-{
-       struct timeval timeout = { 1, 500000 }; // 1.5 seconds 璁剧疆杩炴帴绛夊緟鏃堕棿
+void HiredisTool::init() {
+    struct timeval timeout = {1, 500000}; // 1.5 seconds 璁剧疆杩炴帴绛夊緟鏃堕棿
 
-     //  m_nImgListLen=appConfig.getIntProperty("redis_buf_len");
-       std::string ip=appConfig.getStringProperty("redis_ip");
+    //  m_nImgListLen=appConfig.getIntProperty("redis_buf_len");
+    std::string ip = appConfig.getStringProperty("redis_ip");
 
-       int port=6379;
-        m_redis = redisConnectWithTimeout(ip.c_str(), port, timeout);//寤虹珛杩炴帴
-        if (m_redis->err) {
+    int port = appConfig.getIntProperty("redis_port");
+    m_redis = redisConnectWithTimeout(ip.c_str(), port, timeout);//寤虹珛杩炴帴
+    if (m_redis->err) {
 
-           DBG("RedisTool : Connection error: %s"<< m_redis->errstr);
-        }
-        else
-        {
-                DBG( "init redis tool success " );
+        DBG("RedisTool : Connection error: %s" << m_redis->errstr);
+        redisFree(m_redis);
+        m_redis = nullptr;
+    } else {
+        DBG("init redis tool success ");
 
-        }
+    }
 }
 
 
@@ -79,81 +77,132 @@
 
 
 
-bool HiredisTool::pushImageBuf(const std::string& file_name,const cv::Mat& img)
-{
+bool HiredisTool::pushImageBuf(const std::string &file_name, const cv::Mat &img) {
 
 
-       std::vector<uchar> buf;
-      Json::Value json;
+    std::vector<uchar> buf;
+    Json::Value json;
 
-      CvUtil::cvMat2Buffer(img,buf);
+    CvUtil::cvMat2Buffer(img, buf);
 //      json["time"]=info.time;
-      json["img"]=std::string(buf.begin(),buf.end());
-  //    buf.clear();
-      std::string strBuf=std::string(buf.begin(),buf.end());
-      if(!listLpush(file_name,json.toStyledString()));
-      {
+    json["img"] = std::string(buf.begin(), buf.end());
+    //    buf.clear();
+    std::string strBuf = std::string(buf.begin(), buf.end());
+    if (!listLpush(file_name, json.toStyledString()));
+    {
 
-          return false;
-      }
+        return false;
+    }
 
-      //DBG(json.toStyledString());
+    //DBG(json.toStyledString());
 
-      return true;
+    return true;
 }
 
-void  HiredisTool::getImage(const std::string& file_name, cv::Mat& img)
-{
+bool HiredisTool::setKeyImage(const std::string &file_name, const cv::Mat &img) {
 
 
-        std::string content;
-        cv::Mat imgTep;
+    std::vector<uchar> buf;
+    Json::Value json;
+
+    CvUtil::cvMat2Buffer(img, buf);
+//      json["time"]=info.time;
+    json["img"] = std::move(m_base64.Encode(buf.data(), buf.size()));
+//    json["img"] = std::string(buf.begin(), buf.end());
+    //    buf.clear();
+//    std::string strBuf=std::string(buf.begin(),buf.end());
+    if (!setKeyValue(file_name, json.toStyledString()));
+    {
+
+        return false;
+    }
+
+    //DBG(json.toStyledString());
+
+    return true;
+}
 
 
-        listRpop(file_name,content);
+void HiredisTool::getImage(const std::string &file_name, cv::Mat &img) {
 
 
-        Json::Reader reader;
-        Json::Value value;
-        if(!reader.parse(content,value))
-        {
-           return ;
-        }
+    std::string content;
+    cv::Mat imgTep;
 
-        std::string str=value["img"].asString();
-        std::vector<uchar> data;
+    listRpop(file_name, content);
 
-        data.resize(str.size());
-        data.assign(str.begin(),str.end());
-        CvUtil::buffer2CvMat(data,imgTep);
-     imgTep.copyTo(img);
+
+    Json::Reader reader;
+    Json::Value value;
+
+    if (!reader.parse(content, value)) {
+        return;
+    }
+
+    std::string str = value["img"].asString();
+    std::vector<uchar> data;
+
+    data.resize(str.size());
+
+    data.assign(str.begin(), str.end());
+
+    CvUtil::buffer2CvMat(data, imgTep);
+
+    imgTep.copyTo(img);
     // return img;
-
 }
+
+
+void HiredisTool::getKeyImage(const std::string &imageName, cv::Mat &img) {
+
+    std::string content;
+    cv::Mat imgTep;
+
+    getKeyValue(imageName, content);
+
+    Json::Reader reader;
+    Json::Value value;
+
+    if (!reader.parse(content, value)) {
+        return;
+    }
+
+    std::string str = value["img"].asString();
+    str = std::move(m_base64.Decode(str.c_str(), str.size()));
+    std::vector<uchar> data;
+
+    data.resize(str.size());
+
+    data.assign(str.begin(), str.end());
+
+    CvUtil::buffer2CvMat(data, imgTep);
+
+    imgTep.copyTo(img);
+    // return img;
+}
+
+
 //bool HiredisTool::setCameraState(const std::string& cam_id,const int& type)
 //{
 //    DBG("type="<<type);
 //    return hashSet(file_list,cam_id,type);
 //}
-bool HiredisTool::clearAllImageBuf()
-{
+bool HiredisTool::clearAllImageBuf() {
 //    auto cam_map=findAllCamera();
 //    for(auto cam:cam_map)
 //    {
 //        delKey(cam.first);
 //    }
 }
-bool HiredisTool::listLpush(const std::string& key,const std::string& value)
-{
-    if(!checkParam())
-    {
+
+bool HiredisTool::listLpush(const std::string &key, const std::string &value) {
+    if (!checkParam()) {
         return false;
     }
     redisReply *reply;
 
-    reply = (redisReply*)redisCommand(m_redis,"lpush %s %s", key.c_str(),value.c_str());
-    if(!checkResult(reply))
-    {
+    reply = (redisReply *) redisCommand(m_redis, "lpush %s %s", key.c_str(), value.c_str());
+    if (!checkResult(reply)) {
         return false;
     }
 
@@ -162,41 +211,70 @@
     return true;
 }
 
-bool HiredisTool::listRpop(const std::string& key,std::string& value)
-{
-    if(!checkParam())
-    {
+bool HiredisTool::setKeyValue(const std::string &key, const std::string &value) {
+    if (!checkParam()) {
+        return false;
+    }
+    redisReply *reply;
+
+    reply = (redisReply *) redisCommand(m_redis, "set %s %s", key.c_str(), value.c_str());
+    if (!checkResult(reply)) {
+        return false;
+    }
+
+    freeReplyObject(reply);
+
+    return true;
+}
+
+bool HiredisTool::getKeyValue(const std::string &key, std::string &value) {
+    if (!checkParam()) {
         return false;
     }
     redisReply *reply;
     //1.find all filename
-    reply = (redisReply*)redisCommand(m_redis,"rpop %s  ", key.c_str());
+    reply = (redisReply *) redisCommand(m_redis, "get %s  ", key.c_str());
 
-    if(!checkResult(reply))
-    {
+    if (!checkResult(reply)) {
         return false;
     }
-    if(reply->type == REDIS_REPLY_STRING)
-    {
-        value=reply->str;
+    if (reply->type == REDIS_REPLY_STRING) {
+        value = reply->str;
     }
     freeReplyObject(reply);
 
     return true;
 }
-bool HiredisTool::hashSet(const std::string& tab,const std::string& key,const int& value)
-{
-    if(!checkParam())
-    {
+
+bool HiredisTool::listRpop(const std::string &key, std::string &value) {
+    if (!checkParam()) {
+        return false;
+    }
+    redisReply *reply;
+    //1.find all filename
+    reply = (redisReply *) redisCommand(m_redis, "rpop %s  ", key.c_str());
+
+    if (!checkResult(reply)) {
+        return false;
+    }
+    if (reply->type == REDIS_REPLY_STRING) {
+        value = reply->str;
+    }
+    freeReplyObject(reply);
+
+    return true;
+}
+
+bool HiredisTool::hashSet(const std::string &tab, const std::string &key, const int &value) {
+    if (!checkParam()) {
         return false;
     }
     redisReply *reply;
 
 
-    reply = (redisReply*)redisCommand(m_redis,"hset %s %s %d", tab.c_str(),key.c_str(),value);
+    reply = (redisReply *) redisCommand(m_redis, "hset %s %s %d", tab.c_str(), key.c_str(), value);
 
-    if(!checkResult(reply))
-    {
+    if (!checkResult(reply)) {
         return false;
     }
     freeReplyObject(reply);
@@ -205,171 +283,154 @@
     return true;
 }
 
-int  HiredisTool::getSize(const std::string& key)
-{
-    int size=0;
-    if(!checkParam())
-    {
+int HiredisTool::getSize(const std::string &key) {
+    int size = 0;
+    if (!checkParam()) {
         return size;
     }
     redisReply *reply;
 
-    reply = (redisReply*)redisCommand(m_redis,"llen %s", key.c_str());
+    reply = (redisReply *) redisCommand(m_redis, "llen %s", key.c_str());
 
-    if(!checkResult(reply))
-    {
+    if (!checkResult(reply)) {
         return size;
     }
-    size=reply->integer;
+    size = reply->integer;
     freeReplyObject(reply);
     return size;
 }
-bool HiredisTool::listLindex(const std::string& key,std::string& value)
-{
-    int size=0;
-    if(!checkParam())
-    {
+
+bool HiredisTool::listLindex(const std::string &key, std::string &value) {
+    int size = 0;
+    if (!checkParam()) {
         return size;
     }
     redisReply *reply;
 
-    reply = (redisReply*)redisCommand(m_redis,"lindex %s -1", key.c_str());
+    reply = (redisReply *) redisCommand(m_redis, "lindex %s -1", key.c_str());
 
-    if(!checkResult(reply))
-    {
+    if (!checkResult(reply)) {
         return false;
     }
-    if(reply->type == REDIS_REPLY_STRING)
-    {
-        value=reply->str;
+    if (reply->type == REDIS_REPLY_STRING) {
+        value = reply->str;
     }
     freeReplyObject(reply);
 }
-bool HiredisTool::delKey(const std::string& key)
-{
-    if(!checkParam())
-    {
+
+bool HiredisTool::delKey(const std::string &key) {
+    if (!checkParam()) {
         return false;
     }
     redisReply *reply;
 
-    reply = (redisReply*)redisCommand(m_redis,"del %s", key.c_str());
+    reply = (redisReply *) redisCommand(m_redis, "del %s", key.c_str());
 
 
-    if(!checkResult(reply))
-    {
+    if (!checkResult(reply)) {
         return false;
     }
     freeReplyObject(reply);
     return true;
 }
-bool HiredisTool::checkParam()
-{
-     if(m_redis == nullptr || m_redis->err)
-     {
-         DBG("Redis init Error !!!");
-         init();
-         return false;
-     }
-     return true;
+
+bool HiredisTool::checkParam() {
+    if (m_redis == nullptr || m_redis->err) {
+        if (m_redis) {
+            redisFree(m_redis);
+            m_redis = nullptr;
+        }
+        DBG("Redis init Error !!!");
+        init();
+        return false;
+    }
+    return true;
 }
-bool HiredisTool::checkResult(redisReply *reply)
-{
-    if (reply==nullptr)
-    {
-         DBG("reply nullptr !!!");
-         return false;
+
+bool HiredisTool::checkResult(redisReply *reply) {
+    if (reply == nullptr) {
+        DBG("reply nullptr !!!");
+        return false;
     }
 
-    if (reply->type == REDIS_REPLY_ERROR)
-    {
-        ERR("redisCommand Error: "<<reply->str);
+    if (reply->type == REDIS_REPLY_ERROR) {
+        ERR("redisCommand Error: " << reply->str);
         freeReplyObject(reply);
         return false;
     }
     return true;
 }
-void HiredisTool::addFileInfo(const std::string& filename,const int& file_status)
-{
 
-      hashSet(file_list,filename,file_status);
- }
-std::queue<cv::Mat> HiredisTool::getImgQue(const std::string& filename)
-{
+void HiredisTool::addFileInfo(const std::string &filename, const int &file_status) {
+
+    hashSet(file_list, filename, file_status);
+}
+
+std::queue<cv::Mat> HiredisTool::getImgQue(const std::string &filename) {
     std::queue<cv::Mat> que;
-    if(!checkParam())
-    {
+    if (!checkParam()) {
         return que;
     }
     redisReply *reply;
 
-    reply = (redisReply*)redisCommand(m_redis,"lrange %s 0 -1", filename.c_str());
+    reply = (redisReply *) redisCommand(m_redis, "lrange %s 0 -1", filename.c_str());
 
-    if(!checkResult(reply))
-    {
+    if (!checkResult(reply)) {
         return que;
     }
-    if(reply->type == REDIS_REPLY_ARRAY)
-    {
-        for(int i=0;i<reply->elements;++i)
-        {
-            std::string str=reply->element[i]->str;
+    if (reply->type == REDIS_REPLY_ARRAY) {
+        for (int i = 0; i < reply->elements; ++i) {
+            std::string str = reply->element[i]->str;
             std::vector<uchar> data;
             cv::Mat img;
             data.resize(str.size());
-            data.assign(str.begin(),str.end());
-            CvUtil::buffer2CvMat(data,img);
+            data.assign(str.begin(), str.end());
+            CvUtil::buffer2CvMat(data, img);
             que.push(img);
         }
     }
     freeReplyObject(reply);
 }
-std::map<std::string,int> HiredisTool::findAllFileStatus()
-{
-     std::map<std::string,int> fileMap;
-     if(!checkParam())
-     {
-         return fileMap;
-     }
 
-     redisReply *reply;
+std::map<std::string, int> HiredisTool::findAllFileStatus() {
+    std::map<std::string, int> fileMap;
+    if (!checkParam()) {
+        return fileMap;
+    }
 
-     reply = (redisReply*)redisCommand(m_redis,"hgetall %s", file_list);
+    redisReply *reply;
 
-     if(!checkResult(reply))
-     {
-         return fileMap;
-     }
+    reply = (redisReply *) redisCommand(m_redis, "hgetall %s", file_list);
 
-     if(reply->type == REDIS_REPLY_ARRAY)
-     {
+    if (!checkResult(reply)) {
+        return fileMap;
+    }
 
-         for (int i= 0; i < reply->elements; i+=2)
-         {
-             std::string key=reply->element[i]->str;
-             std::string value=reply->element[i+1]->str;
+    if (reply->type == REDIS_REPLY_ARRAY) {
 
-             if(key.empty()||value.empty()) continue;
+        for (int i = 0; i < reply->elements; i += 2) {
+            std::string key = reply->element[i]->str;
+            std::string value = reply->element[i + 1]->str;
 
-             fileMap.insert(std::pair<std::string,int>(key,atoi(value.c_str())));
-         }
-     }
-     freeReplyObject(reply);
-     return fileMap;
+            if (key.empty() || value.empty()) continue;
+
+            fileMap.insert(std::pair<std::string, int>(key, atoi(value.c_str())));
+        }
+    }
+    freeReplyObject(reply);
+    return fileMap;
 }
-bool HiredisTool::hashDel(const std::string& tab,const std::string &key)
-{
-    if(!checkParam())
-    {
+
+bool HiredisTool::hashDel(const std::string &tab, const std::string &key) {
+    if (!checkParam()) {
         return false;
     }
     redisReply *reply;
 
 
-    reply = (redisReply*)redisCommand(m_redis,"hdel %s %s", tab.c_str(),key.c_str());
+    reply = (redisReply *) redisCommand(m_redis, "hdel %s %s", tab.c_str(), key.c_str());
 
-    if(!checkResult(reply))
-    {
+    if (!checkResult(reply)) {
         return false;
     }
     freeReplyObject(reply);

--
Gitblit v1.8.0