#include "HiredisTool.h" #include #include #include #include #include HiredisTool::HiredisTool(): m_redis(nullptr), m_nImgListLen(0) { init(); } HiredisTool::~HiredisTool() { if(m_redis != nullptr) { redisFree(m_redis);//析构函数释放资源 DBG("~RedisTool :: free redis connection ") ; } } 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"); int port=6379; 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 " ); } } //std::map HiredisTool::findAllCamera() //{ // std::map camIdMap; // if(!checkParam()) // { // return camIdMap; // } // redisReply *reply; // reply = (redisReply*)redisCommand(m_redis,"hgetall %s", cam_key); // if(!checkResult(reply)) // { // return camIdMap; // } // if(reply->type == REDIS_REPLY_ARRAY) // { // 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(key.empty()||value.empty()) continue; // camIdMap.insert(std::pair(key,atoi(value.c_str()))); // } // } // freeReplyObject(reply); // return camIdMap; //} bool HiredisTool::pushImageBuf(const std::string& file_name,const cv::Mat& img) { std::vector buf; Json::Value json; 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())); { return false; } //DBG(json.toStyledString()); return true; } void HiredisTool::getImage(const std::string& file_name, cv::Mat& img) { std::string content; cv::Mat imgTep; listRpop(file_name,content); Json::Reader reader; Json::Value value; if(!reader.parse(content,value)) { return ; } std::string str=value["img"].asString(); std::vector 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 == 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); if(!checkResult(reply)) { return false; } freeReplyObject(reply); return true; } 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()); if(!checkResult(reply)) { return size; } size=reply->integer; freeReplyObject(reply); return size; } 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()); if(!checkResult(reply)) { return false; } if(reply->type == REDIS_REPLY_STRING) { value=reply->str; } freeReplyObject(reply); } bool HiredisTool::delKey(const std::string& key) { if(!checkParam()) { return false; } redisReply *reply; reply = (redisReply*)redisCommand(m_redis,"del %s", key.c_str()); 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::checkResult(redisReply *reply) { if (reply==nullptr) { DBG("reply nullptr !!!"); return false; } if (reply->type == REDIS_REPLY_ERROR) { ERR("redisCommand Error: "<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 HiredisTool::getImgQue(const std::string& filename) { std::queue que; if(!checkParam()) { return que; } redisReply *reply; reply = (redisReply*)redisCommand(m_redis,"lrange %s 0 -1", filename.c_str()); if(!checkResult(reply)) { return que; } if(reply->type == REDIS_REPLY_ARRAY) { for(int i=0;ielements;++i) { std::string str=reply->element[i]->str; std::vector data; cv::Mat img; data.resize(str.size()); data.assign(str.begin(),str.end()); CvUtil::buffer2CvMat(data,img); que.push(img); } } freeReplyObject(reply); } std::map HiredisTool::findAllFileStatus() { std::map fileMap; if(!checkParam()) { return fileMap; } redisReply *reply; reply = (redisReply*)redisCommand(m_redis,"hgetall %s", file_list); if(!checkResult(reply)) { return fileMap; } if(reply->type == REDIS_REPLY_ARRAY) { 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(key.empty()||value.empty()) continue; fileMap.insert(std::pair(key,atoi(value.c_str()))); } } freeReplyObject(reply); return fileMap; } 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()); if(!checkResult(reply)) { return false; } freeReplyObject(reply); return true; }