//
|
// Created by pans on 4/27/18.
|
//
|
|
#ifndef FACESEARCHSERVER_FACEFEATURESEARCHSERVERI_H
|
#define FACESEARCHSERVER_FACEFEATURESEARCHSERVERI_H
|
|
#include <FaceSearchServer.h>
|
#include <Ice/Ice.h>
|
#include <basic/rpc/IceRpc.hpp>
|
#include <basic/db/Elasticsearch/EsDBTool.h>
|
#include <basic/util/app/AppConfig.h>
|
|
#include <ErlangDbTool.h>
|
#include <SqliteFaceEncap.h>
|
#include "FaceDBCompareServer.h"
|
|
//struct TableInfo {
|
// std::string tab_name;
|
// std::string startTime;
|
// std::string endTime;
|
// std::string bwType;
|
// std::string create_by;
|
//};
|
|
static bool t_live_ret = true;
|
|
//全局的信号量,如果数据刷新延迟过高可以改为使用nsq消息队列。
|
static pthread_cond_t func_cond(PTHREAD_COND_INITIALIZER);
|
static pthread_mutex_t func_cond_mutex(PTHREAD_MUTEX_INITIALIZER);
|
|
|
void erlangCallBackFunc(std::string);
|
|
class FaceFeatureSearchServerI : public FaceSearch::FaceFeatureSearchServer {
|
public:
|
FaceFeatureSearchServerI();
|
|
FaceFeatureSearchServerI(Ice::CommunicatorPtr &ich, std::string nodeName, std::string cookie);
|
|
virtual ~FaceFeatureSearchServerI();
|
|
public:
|
/**
|
* @deprecated
|
* @return
|
*/
|
virtual ::FaceSearch::FaceResults faceSearchMax(const ::FaceSearch::Data &, const ::std::string &,
|
const ::Ice::Current & = ::Ice::emptyCurrent);
|
|
/***
|
* 对比获取第n大的人员
|
* @return
|
*/
|
virtual ::FaceSearch::FaceResults
|
faceSearchTopN(const ::FaceSearch::Data &, const ::std::string &, ::Ice::Int, ::Ice::Float,
|
const ::Ice::Current & = ::Ice::emptyCurrent);
|
|
private:
|
/**
|
* @deprecated
|
* @param nodeName
|
* @param cookie
|
* @return
|
*/
|
bool initErlang(std::string nodeName, std::string cookie);
|
|
|
//#todo loadData
|
/**
|
* 加载人脸属性
|
* @param faceFea
|
* @return
|
*/
|
static bool loadFeatureData(FaceFeatureSearchServerI *faceFea);
|
|
/**
|
* 数据更新线程,有信号触发才会更新
|
* @param faceFea
|
*/
|
static void dataUpdate(FaceFeatureSearchServerI *faceFea);
|
|
/***
|
* 等待底库表加载成功
|
* @param faceFea
|
* @param loop
|
*/
|
static void waitTables(FaceFeatureSearchServerI *faceFea, int loop = -1);
|
|
private:
|
long m_inTime;
|
// 特征对比类
|
std::map<std::string, FaceDBCompareServer *> m_faceFCMAP;
|
// 底库类型,生效时间等
|
std::map<std::string, TableInfo> m_tableType;
|
|
// 对 m_faceFCMAP 加读写锁
|
// 当对比时,数据刷新会等待
|
RWLock m_rwLock;
|
|
ErlangTool::ErlangDbTool m_erlangDbTool;
|
|
SqliteFaceEncap m_sqliteFaceEncap;
|
|
std::mutex m_mutex;
|
bool m_retUpdatePthread;
|
|
Base64 base64;
|
|
EsDBTool pManagerEsDB;//(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
|
};
|
|
|
#endif //FACESEARCHSERVER_FACEFEATURESEARCHSERVERI_H
|