//// //// Created by ps on 8/6/18. //// // //#ifndef UNTITLED_ERLANGTOOL_HPP //#define UNTITLED_ERLANGTOOL_HPP // //#include //#include //#include // //#include //#include //#include // //#include //#include //#include //#include // //#include "erl_interface.h" //#include "ei.h" // //#include "SyncDB.hpp" // //#define TIMEOUT (5000) // ////#TODO 多线程优化 //namespace ErlangTool { // // static int m_loop = 0; // //map // typedef std::map map_FaceDataCache; // //map // typedef std::map map_DevDataCache; // //map<表名,底库表信息> // typedef std::map map_TabDataCache; // //map<表名,黑白名单类型> // typedef std::map map_BwDataCache; // // //c++11 互斥锁 // // LockG(Parma); // typedef std::lock_guard LockG; // // /*** // * 判断文件夹路径是否存在,不存在则创建 // * @param dir 文件路径 // * @param mkdir_flag 是否创建创建文件夹 // * @return 是否成功 // */ // static bool dir_file_exists(std::string dir, bool mkdir_flag = true) { // int state = access(dir.c_str(), R_OK | W_OK); // 头文件 #include // if (state == 0) { // //#todo // INFO("file exist"); // return true; // } else if (mkdir_flag) { // dir = "mkdir -p " + dir; // system(dir.c_str()); // 调用linux系统命令创建文件 // //#todo // return true; // } else { // return false; // } // } // // /*** // * 测试节点是否启动 // * @param nodeName 节点名称 // * @param cookie 节点cookie // * @return 启动状态 // */ // static bool pingNode(const std::string &nodeName, const std::string &cookie) { // int fd = -1; // int ret = -1; // erl_init(NULL, 0); // struct in_addr addr; // addr.s_addr = inet_addr("127.0.0.1"); // if (erl_connect_xinit("idril", "cnode", "cnode@127.0.0.1", &addr, cookie.c_str(), 0) == -1) { // ERR(""); // erl_err_quit("erl_connect_xinit"); // return false; // } // // fd = erl_connect(const_cast(nodeName.c_str())); // if (0 > fd) { //// erl_err_quit("erl_connect"); //// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " error " << fd << std::endl; // return false; // } //// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << fd << std::endl; // erl_close_connection(fd); // return true; // } // // /*** // * 检查ETERM的数据类型 // * @param elemen // * @return 返回数据类型 // */ // static int checkETERMType(ETERM *elemen) { // if (elemen == NULL) { // return -1; // } // switch (ERL_TYPE(elemen)) { // case ERL_UNDEF: // return ERL_UNDEF; // case ERL_INTEGER: // INFO("value is a int: " << ERL_INT_VALUE(elemen)); // return ERL_INTEGER; // case ERL_U_INTEGER: // break; // case ERL_ATOM: { //// int atomSize = ERL_ATOM_SIZE(elemen); //// char *atomValue = ERL_ATOM_PTR(elemen); //// printf("value is a atom: atomSize:%d, atomValue:%s \n\r", atomSize, atomValue); // return ERL_ATOM; // } // case ERL_PID: // break; // case ERL_PORT: // break; // case ERL_REF: // break; // case ERL_LIST: //// printf("value is a list:%s\n", erl_iolist_to_string(elemen)); // return ERL_LIST; // case ERL_NIL: // return ERL_EMPTY_LIST; // case ERL_TUPLE: // INFO("value is a tupe: " << ERL_ATOM_PTR(erl_element(1, elemen))); // return ERL_TUPLE; // case ERL_BINARY: // break; // case ERL_FLOAT: // break; // case ERL_VARIABLE: // break; // case ERL_SMALL_BIG: // break; // case ERL_U_SMALL_BIG: // break; // case ERL_FUNCTION: // break; // case ERL_BIG: // break; // case ERL_LONGLONG: // break; // case ERL_U_LONGLONG: // break; // default: // ERR("[Client] got a value but now checked\n\r"); // //#todo morechuli // } // return -1; // } // // static void erlangFreeEterm(int count, ...) { // va_list args; // va_start(args, count); // for (int i = 0; i < count; ++i) { // auto test = va_arg(args, ETERM*); // erl_free_compound(test); //// if (test != NULL) //// erl_free_compound(test); //// else{ //// //// } // } // } // // // /*** // * Erlang交互工具 // * #todo map保存到内存? // */ // class ErlangDbTool { // public: // ErlangDbTool() : m_fd(-1) { // // } // // /*** // * 初始化节点(zhizuo chaxun shiyong) // * @param nodeName 节点名称 // * @param cookie 集群cookie // */ // ErlangDbTool(const std::string &nodeName, const std::string &cookie, const std::string &pName) : // m_fd(-1), m_path(""), m_nodeName(nodeName), m_cookie(cookie), m_pName(pName) { // initCNode(); // } // // /*** // * 初始化节点 // * @param path 节点数据库保存路径 // * @param nodeName 节点名称 // * @param cookie 集群cookie // */ // ErlangDbTool(const std::string &path, const std::string &nodeName, const std::string &cookie, // const std::string &pName) : m_fd(-1), m_path(path), m_nodeName(nodeName), m_cookie(cookie), // m_pName(pName) { // initCNode(); // } // // //clusterID clusterName // /*** // * 初始化节点 // * @param path 节点数据库保存路径 // * @param nodeName 节点名称 // * @param cookie 集群cookie // * @param clusterID 集群id // * @param clusterName 集群名称 // */ // ErlangDbTool(const std::string &path, const std::string &nodeName, const std::string &cookie, // const std::string &clusterID, const std::string &clusterName) : // m_fd(-1), m_path(path), m_nodeName(nodeName), m_cookie(cookie), m_clusterID(clusterID), // m_clusterName(clusterName) { // // } // // //clusterID clusterName // /*** // * 初始化节点 // * @param path 节点数据库保存路径 // * @param nodeName 节点名称 // * @param cookie 集群cookie // * @param clusterID 集群id // * @param clusterName 集群名称 // * @param pName c节点标识名 // */ // ErlangDbTool(const std::string &path, const std::string &nodeName, const std::string &cookie, // const std::string &clusterID, const std::string &clusterName, const std::string &pName) : // m_fd(-1), m_path(path), m_nodeName(nodeName), m_cookie(cookie), m_clusterID(clusterID), // m_clusterName(clusterName), m_pName(pName) { // initCNode(); // } // // private: // // void initCNode() { // erl_init(NULL, 0); // struct in_addr addr; // //#todo // addr.s_addr = inet_addr("127.0.0.1"); // std::string t_cNodeName(m_pName); // t_cNodeName.append("@127.0.0.1"); // //m_pName // if (erl_connect_xinit("idril", const_cast(m_pName.c_str()), const_cast(t_cNodeName.c_str()), // &addr, const_cast(m_cookie.c_str()), 0) == -1) { // ERR("erl_connect_xinit error" << m_pName << " " << t_cNodeName << " " << m_cookie); // erl_err_quit("erl_connect_xinit"); // } else { // ERR("erl_connect_xinit ok" << m_pName << " " << t_cNodeName << " " << m_cookie); // } // } // // public: // // virtual ~ErlangDbTool() { // erl_close_connection(m_fd); // } // // //#todo setCNodeName // // //#todo sendMessage // // /*** // * 启动erlang节点 // * @return 启动状态 // */ // int initErlang() { // if (m_nodeName == "") { // ERR("m_nodeName is null "); // return 3; // } // m_ret = pingNode(m_nodeName, m_cookie); // if (!m_ret) { // if (dir_file_exists(m_path, true)) { // std::string cmd = std::string("cd " + m_path + " && erl -name " + m_nodeName + " -setcookie " // + m_cookie + " -mnesia dir '\"" + m_path + // "\"' -detached -noshell");// >>log // std::cout << cmd << std::endl; // system(cmd.c_str()); // std::cout << m_ret << std::endl; // m_ret = waitNode(); // return m_ret; // } else { // ERR("create file faile "); // return 0; // } // } else { // INFO("node is running"); // return 2; // } // } // // std::string getConfigJsonString() { // Json::Value t_json; // Json::FastWriter writer; // // t_json["\"path\""] = "\"" + m_path + "\""; // t_json["\"nodeName\""] = "\"" + m_nodeName + "\""; // t_json["\"cookie\""] = "\"" + m_cookie + "\""; // t_json["\"clusterID\""] = "\"" + m_clusterID + "\""; // t_json["\"clusterName\""] = "\"" + m_clusterName + "\""; // // std::string str_json = writer.write(t_json); // // return str_json.substr(0, str_json.length() - 1); // } // // /*** // * 启动节点数据库 // * 新节点自动创建数据库 // * @param FatherNodeName 第一个节点无需传入此参数,其他节点需要传入引导节点的名称 // * @param DeviceName 设备名称 // * @param DevAdd 设备地址 // * @return // */ // bool startNodeDb(std::string FatherNodeName, std::string DeviceId = "", std::string DevAdd = "DevAddress") { // LockG lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // if (m_ret) { //// DeviceName = DeviceName.empty() ? m_nodeName : DeviceName; // } else { // //#todo error message // ERR(" error " << m_ret << " " << m_fd); // return false; // } // // ErlMessage emsg; /* Incoming message */ // //hanshu canshu // ETERM *arrlist[5]; // arrlist[0] = erl_mk_atom(m_nodeName.c_str()); // arrlist[1] = erl_mk_atom(FatherNodeName.c_str()); // arrlist[2] = erl_mk_atom(DeviceId.c_str()); // arrlist[3] = erl_mk_atom(m_clusterID.c_str()); // arrlist[4] = erl_mk_atom(m_clusterName.c_str()); // ETERM *list = erl_mk_list(arrlist, 5); // //// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << m_fd << std::endl; //// erl_rpc(m_fd, "syncDB", "startNode", list); // int ret = -1; // ret = erl_rpc_to(m_fd, "syncDB", "startNode", list); // if (ret == ERL_TICK) { // ret = erl_rpc_from(m_fd, 9000000000, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // std::map t_results; // ETERM *key, *value; // ETERM *tuplep[6]; // // tuplep[0] = erl_element(2, emsg.msg); // key = erl_element(1, tuplep[0]); // value = erl_element(2, tuplep[0]); //// printf("key:%s\n", ERL_ATOM_PTR(key)); // switch (checkETERMType(value)) { // case ERL_ATOM: { // int atomSize = ERL_ATOM_SIZE(value); // char *atomValue = ERL_ATOM_PTR(value); // t_results.insert(std::make_pair(ERL_ATOM_PTR(key), atomValue)); //// printf("value is a atom: atomSize:%d, atomValue:%s \n\r", atomSize, atomValue); // break; // } // default: // ERR("error add case todo \n\r"); // } // auto it = t_results.find("atomic"); // if (t_results.size() > 0 && t_results.end() != it && it->second == "ok") { //// erlangFreeEterm(7, emsg.to, emsg.msg, emsg.from, list, key, value, tuplep[0]); //// erl_eterm_release(); // return true; // } //if end // else { // INFO(" t_results size is " << t_results.size()); // for (auto &item : t_results) { // INFO("item is " << item.first << " " << item.second); // } // } // }//ret == ERL_MSG end // else { // ERR(" ret is " << ret); // // } // } //ret == ERL_TICK // //// erlangFreeEterm(4, emsg.to, emsg.msg, emsg.from, list); // return false; // } // // /*** // * 删除节点数据库,同时删除本地文件 // * @return 返回状态 // */ // bool removeNode() { // LockG lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // if (!m_ret) { // //#todo error message // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << m_ret << " " << m_fd << std::endl; // return false; // } // int ret = -1; // ErlMessage emsg; /* Incoming message */ // //hanshu canshu //// ETERM *arrlist[1]; //// arrlist[0] = erl_mk_atom(m_nodeName.c_str()); // ETERM *list = erl_mk_empty_list();// (arrlist, 0); // //// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << m_fd << std::endl; // ret = erl_rpc_to(m_fd, "syncDB", "removeNode", list); // if (ret == ERL_TICK) { // ret = erl_rpc_from(m_fd, TIMEOUT, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // std::map t_results; // ETERM *key, *value; // ETERM *tuplep[6]; // // tuplep[0] = erl_element(2, emsg.msg); // key = erl_element(1, tuplep[0]); // value = erl_element(2, tuplep[0]); //// printf("key:%s\n", ERL_ATOM_PTR(key)); // switch (checkETERMType(value)) { // case ERL_ATOM: { // int atomSize = ERL_ATOM_SIZE(value); // char *atomValue = ERL_ATOM_PTR(value); // t_results.insert(std::make_pair(ERL_ATOM_PTR(key), atomValue)); //// printf("value is a atom: atomSize:%d, atomValue:%s \n\r", atomSize, atomValue); // break; // } // default: // printf("error add case todo \n\r"); // } // auto it = t_results.find("atomic"); // if (t_results.size() > 0 && t_results.end() != it && it->second == "ok") { // //删除本地文件 // std::string cmd = std::string("rm -rf ").append(m_path); // //#todo // system(cmd.c_str()); // erlangFreeEterm(7, emsg.to, emsg.msg, emsg.from, list, key, value, tuplep[0]); // erl_eterm_release(); // return true; // } //if end // } //ret == ERL_MSG end // } //ret == ERL_TICK // // erlangFreeEterm(4, emsg.to, emsg.msg, emsg.from, list); // return false; // } // // // bool modifyCluName(std::string CluId, std::string CluName) { // LockG lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // if (!m_ret) { // //#todo error message // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << m_ret << " " << m_fd << std::endl; // return false; // } // ErlMessage emsg; /* Incoming message */ // int ret = -1; // ETERM *arrlist[2]; // arrlist[0] = erl_mk_atom(CluId.c_str()); // arrlist[1] = erl_mk_atom(CluName.c_str()); // ETERM *list = erl_mk_list(arrlist, 2); // // ret = erl_rpc_to(m_fd, "syncDB", "modifyCluName", list); // if (ret == ERL_TICK) { // ret = erl_rpc_from(m_fd, TIMEOUT, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // std::map t_results; // // ETERM *tail_list; // ETERM *list_ret[1000], *arr_ret[2]; // ETERM *key, *value; // ETERM *tuplep[6]; // // arr_ret[0] = erl_element(2, emsg.msg); // int erlLength = erl_length(arr_ret[0]); // printf("arr_ret[0]:%d\n", erlLength); // list_ret[0] = erl_hd(arr_ret[0]); // tail_list = erl_tl(arr_ret[0]); // for (int i = 0; i < erlLength; i++) { // if (i > 0) { // list_ret[i] = erl_hd(tail_list); // tail_list = erl_tl(tail_list); // } //// printf("list_ret[%d]:%d\n", i, erl_length(list_ret[i])); // tuplep[0] = erl_hd(list_ret[i]); // key = erl_element(1, list_ret[i]); // value = erl_element(2, list_ret[i]); //// printf("key:%s\n", ERL_ATOM_PTR(key)); // // switch (checkETERMType(value)) { // case ERL_ATOM: { // int atomSize = ERL_ATOM_SIZE(value); // char *atomValue = ERL_ATOM_PTR(value); // printf("value is a atom: atomSize:%d, atomValue:%s \n\r", atomSize, atomValue); // t_results.insert(std::make_pair(ERL_ATOM_PTR(key), atomValue)); // break; // } // default: // printf("error add case todo \n\r"); // } // erlangFreeEterm(4, key, value, tuplep[0], list_ret[i]); // // } // erlangFreeEterm(2, tail_list, arr_ret[0]); // erl_eterm_release(); // auto it = t_results.find("atomic"); // if (t_results.size() > 0 && t_results.end() != it && it->second == "ok") { // return true; // } // } // } // erl_free_array(arrlist, 2); //// erlangFreeEterm(4, emsg.to, emsg.msg, emsg.from, list); // erl_eterm_release(); // return false; // } // // // /*** // * 查找在线节点信息 // * #TODO 有一个小bug // * device_info.create_by会被重置 // * @return 节点集合信息 // */ // map_DevDataCache findAllNode() { // LockG lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // if (!m_ret) { // //#todo error message // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << m_ret << " " << m_fd << std::endl; // // return map_DevDataCache(); // } // map_DevDataCache devDataCache; // int ret = -1; // ErlMessage emsg; /* Incoming message */ // //hanshu canshu //// ETERM *arrlist[0]; //// arrlist[0] = erl_mk_atom(m_nodeName.c_str()); // ETERM *list = erl_mk_empty_list();//erl_mk_list(arrlist, 0); // // ret = erl_rpc_to(m_fd, "syncDB", "findAllNode", list); // if (ret == ERL_TICK) { // ret = erl_rpc_from(m_fd, TIMEOUT, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // ETERM *key, *value; // ETERM *tuplep[20]; // ETERM *arr_ret[2], *list_ret[1000]; // ETERM *tail_list, *tail_tuple; // arr_ret[0] = erl_element(2, emsg.msg); // if (checkETERMType(arr_ret[0]) == ERL_LIST) { // int erlLength = erl_length(arr_ret[0]); //// printf("arr_ret[0]:%d\n", erlLength); // list_ret[0] = erl_hd(arr_ret[0]); // tail_list = erl_tl(arr_ret[0]); // for (int i = 0; i < erlLength; i++) { // if (i > 0) { // list_ret[i] = erl_hd(tail_list); // tail_list = erl_tl(tail_list); // } // if (checkETERMType(list_ret[i]) == ERL_LIST) { // SyncDB::Device_Info device_info; // int erlLength1 = erl_length(list_ret[i]); //// printf("list_ret[%d]:%d\n", i, erlLength1); // tuplep[0] = erl_hd(list_ret[i]); // tail_tuple = erl_tl(list_ret[i]); // // for (int j = 0; j < erlLength1; j++) { // if (j > 0) { // tuplep[j] = erl_hd(tail_tuple); // tail_tuple = erl_tl(tail_tuple); // } // key = erl_element(1, tuplep[j]); // value = erl_element(2, tuplep[j]); //// printf("key:%s\n", erl_iolist_to_string(key)); // switch (checkETERMType(value)) { // case ERL_ATOM: { // device_info.setValue(erl_iolist_to_string(key), ERL_ATOM_PTR(value)); // break; // } // case ERL_INTEGER: { // device_info.setValue(erl_iolist_to_string(key), // std::to_string(ERL_INT_VALUE(value))); // break; // } // case ERL_LIST: { // device_info.setValue(erl_iolist_to_string(key), // erl_iolist_to_string(value)); // break; // } // default: // printf("error add case todo %d\n\r", checkETERMType(value)); // } // erlangFreeEterm(3, key, value, tuplep[j]); // } //// printf("\none list end\n\n\n\n"); // // #todo this is have a bug //// device_info.create_by = ""; // devDataCache.insert(std::make_pair(device_info.uuid, device_info)); // erlangFreeEterm(1, tail_tuple); // } else { // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " type error " // << checkETERMType(arr_ret[0]) // << " " // << std::endl; // } // erlangFreeEterm(1, list_ret[i]); // } // // erlangFreeEterm(6, emsg.to, emsg.msg, emsg.from, list, tail_list, arr_ret[0]); // erl_eterm_release(); // return devDataCache; // } else { // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << checkETERMType(arr_ret[0]) // << " " // << std::endl; // } // } // } //ret == ERL_TICK end // erlangFreeEterm(4, emsg.to, emsg.msg, emsg.from, list); // erl_eterm_release(); // return map_DevDataCache(); // } // // /*** // * 创建底库表 // * @param TableType car||person // * @param TableName // * @param SyncType true 1||false 0 // * @param BwType "Black"1||"White"0 // * @return 创建状态 // */ // bool createDatabase(std::string TableType, std::string TableName, bool SyncType, std::string BwType, // std::string StartTime = "", std::string EndTime = "") { // LockG lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // if (!m_ret) { // //#todo error message // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << m_ret << " " << m_fd << std::endl; // return false; // } // std::string NewTableName = ((!SyncType) && TableName.find("lt_")) ? std::string("lt_").append(TableName) // : TableName; // // ErlMessage emsg; /* Incoming message */ // int ret = -1; // ETERM *arrlist[6]; // arrlist[0] = erl_mk_atom(TableType.c_str()); // arrlist[1] = erl_mk_atom(NewTableName.c_str()); // auto str = std::to_string(SyncType); // arrlist[2] = erl_mk_atom(str.c_str()); // arrlist[3] = erl_mk_atom(BwType.c_str()); // arrlist[4] = erl_mk_atom(StartTime.c_str()); // arrlist[5] = erl_mk_atom(EndTime.c_str()); // ETERM *list = erl_mk_list(arrlist, 6); // // ret = erl_rpc_to(m_fd, "syncDB", "createDatabase", list); // if (ret == ERL_TICK) { // ret = erl_rpc_from(m_fd, TIMEOUT, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // std::map t_results; // // ETERM *tail_list; // ETERM *list_ret[1000], *arr_ret[2]; // ETERM *key, *value; // ETERM *tuplep[6]; // // arr_ret[0] = erl_element(2, emsg.msg); // int erlLength = erl_length(arr_ret[0]); // printf("arr_ret[0]:%d\n", erlLength); // list_ret[0] = erl_hd(arr_ret[0]); // tail_list = erl_tl(arr_ret[0]); // for (int i = 0; i < erlLength; i++) { // if (i > 0) { // list_ret[i] = erl_hd(tail_list); // tail_list = erl_tl(tail_list); // } //// printf("list_ret[%d]:%d\n", i, erl_length(list_ret[i])); // tuplep[0] = erl_hd(list_ret[i]); // key = erl_element(1, list_ret[i]); // value = erl_element(2, list_ret[i]); //// printf("key:%s\n", ERL_ATOM_PTR(key)); // // switch (checkETERMType(value)) { // case ERL_ATOM: { //// int atomSize = ERL_ATOM_SIZE(value); // char *atomValue = ERL_ATOM_PTR(value); //// printf("value is a atom: atomSize:%d, atomValue:%s \n\r", atomSize, atomValue); // t_results.insert(std::make_pair(ERL_ATOM_PTR(key), atomValue)); // break; // } // default: // printf("error add case todo \n\r"); // } // erlangFreeEterm(4, key, value, tuplep[0], list_ret[i]); // // } // erlangFreeEterm(2, tail_list, arr_ret[0]); // erl_eterm_release(); // auto it = t_results.find("atomic"); // if (t_results.size() > 0 && t_results.end() != it && it->second == "ok") { // return true; // } // } // } // erl_free_array(arrlist, 6); //// erlangFreeEterm(4, emsg.to, emsg.msg, emsg.from, list); // erl_eterm_release(); // return false; // } // // /*** // * 更新底库表 // * @param TableType car||person // * @param TableName // * @param SyncType true 1||false 0 // * @param BwType "white"0||"black"1 // * @return 创建状态 // */ // bool updateDatabase(std::string UUID, std::string TableType, std::string TableName, bool SyncType, // std::string BwType, std::string StartTime = "", std::string EndTime = "") { // LockG lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // if (!m_ret) { // //#todo error message // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << m_ret << " " << m_fd << std::endl; // return false; // } // std::string NewTableName = ((!SyncType) && TableName.find("lt_")) ? std::string("lt_").append(TableName) // : TableName; // // ErlMessage emsg; /* Incoming message */ // int ret = -1; // ETERM *arrlist[7]; // arrlist[0] = erl_mk_atom(UUID.c_str()); // arrlist[1] = erl_mk_atom(TableType.c_str()); // arrlist[2] = erl_mk_atom(NewTableName.c_str()); // auto str = std::to_string(SyncType); // arrlist[3] = erl_mk_atom(str.c_str()); // arrlist[4] = erl_mk_atom(BwType.c_str()); // arrlist[5] = erl_mk_atom(StartTime.c_str()); // arrlist[6] = erl_mk_atom(EndTime.c_str()); // ETERM *list = erl_mk_list(arrlist, 7); // // ret = erl_rpc_to(m_fd, "syncDB", "updateDatabase", list); // if (ret == ERL_TICK) { // ret = erl_rpc_from(m_fd, TIMEOUT, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // std::map t_results; // // ETERM *tail_list; // ETERM *list_ret[1000], *arr_ret[2]; // ETERM *key, *value; // ETERM *tuplep[6]; // // arr_ret[0] = erl_element(2, emsg.msg); // int erlLength = erl_length(arr_ret[0]); // printf("arr_ret[0]:%d\n", erlLength); // list_ret[0] = erl_hd(arr_ret[0]); // tail_list = erl_tl(arr_ret[0]); // for (int i = 0; i < erlLength; i++) { // if (i > 0) { // list_ret[i] = erl_hd(tail_list); // tail_list = erl_tl(tail_list); // } //// printf("list_ret[%d]:%d\n", i, erl_length(list_ret[i])); // tuplep[0] = erl_hd(list_ret[i]); // key = erl_element(1, list_ret[i]); // value = erl_element(2, list_ret[i]); //// printf("key:%s\n", ERL_ATOM_PTR(key)); // // switch (checkETERMType(value)) { // case ERL_ATOM: { //// int atomSize = ERL_ATOM_SIZE(value); // char *atomValue = ERL_ATOM_PTR(value); //// printf("value is a atom: atomSize:%d, atomValue:%s \n\r", atomSize, atomValue); // t_results.insert(std::make_pair(ERL_ATOM_PTR(key), atomValue)); // break; // } // default: // printf("error add case todo \n\r"); // } // erlangFreeEterm(4, key, value, tuplep[0], list_ret[i]); // } // erlangFreeEterm(2, tail_list, arr_ret[0]); // erl_eterm_release(); // auto it = t_results.find("atomic"); // if (t_results.size() > 0 && t_results.end() != it && it->second == "ok") { // return true; // } // } // } // erl_free_array(arrlist, 7); //// erlangFreeEterm(4, emsg.to, emsg.msg, emsg.from, list); // erl_eterm_release(); // return false; // } // // /*** // * 删除数据表 // * @param TableType car||person // * @param TableName biaoming // * @param SyncType true 1||false 0 // * @return // */ // bool deleteDatabase(std::string TableType, std::string TableName, bool SyncType) { // LockG lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // if (!m_ret) { // //#todo error message // ERR(" error " << m_ret << " " << m_fd); // return false; // } // std::string NewTableName = ((!SyncType) && TableName.find("lt_")) ? std::string("lt_").append(TableName) // : TableName; // // ErlMessage emsg; /* Incoming message */ // int ret = -1; // // ETERM *arrlist[2]; // arrlist[0] = erl_mk_atom(TableType.c_str()); // arrlist[1] = erl_mk_atom(NewTableName.c_str()); // ETERM *list = erl_mk_list(arrlist, 2); // // ret = erl_rpc_to(m_fd, "syncDB", "deleteDatabase", list); // if (ret == ERL_TICK) { // ret = erl_rpc_from(m_fd, TIMEOUT, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // std::map t_results; // ETERM *tail_list; // ETERM *list_ret[10], *arr_ret[2]; // ETERM *key, *value; // ETERM *tuplep[6]; // arr_ret[0] = erl_element(2, emsg.msg); // int erlLength = erl_length(arr_ret[0]); // printf("arr_ret[0]:%d\n", erlLength); // list_ret[0] = erl_hd(arr_ret[0]); // tail_list = erl_tl(arr_ret[0]); // for (int i = 0; i < erlLength; i++) { // if (i > 0) { // list_ret[i] = erl_hd(tail_list); // tail_list = erl_tl(tail_list); // } //// printf("list_ret[%d]:%d\n", i, erl_length(list_ret[i])); // tuplep[0] = erl_hd(list_ret[i]); // key = erl_element(1, list_ret[i]); // value = erl_element(2, list_ret[i]); //// printf("key:%s\n", ERL_ATOM_PTR(key)); // switch (checkETERMType(value)) { // case ERL_ATOM: { // int atomSize = ERL_ATOM_SIZE(value); // char *atomValue = ERL_ATOM_PTR(value); // t_results.insert(std::make_pair(ERL_ATOM_PTR(key), atomValue)); // printf("value is a atom: atomSize:%d, atomValue:%s \n\r", atomSize, atomValue); // break; // } // default: // printf("error add case todo \n\r"); // } // erlangFreeEterm(4, key, value, tuplep[0], list_ret[i]); // } // erlangFreeEterm(2, tail_list, arr_ret[0]); // auto it = t_results.find("atomic"); // if (t_results.size() > 0 && t_results.end() != it && it->second == "ok") { // return true; // } // } // } // erl_free_array(arrlist, 2); // erlangFreeEterm(4, emsg.to, emsg.msg, emsg.from, list); // return false; // } // // /*** // * 查询所有数据表 // * @return // */ // map_TabDataCache findAllDatabase() { // LockG lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // map_TabDataCache tabDataCache; // if (!m_ret) { // //#todo error message // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << m_ret << " " << m_fd << std::endl; // return tabDataCache; // } // int ret = -1; // ErlMessage emsg; /* Incoming message */ // //hanshu canshu //// ETERM *arrlist[0]; //// arrlist[0] = erl_mk_atom(m_nodeName.c_str()); // ETERM *list = erl_mk_empty_list();//erl_mk_list(arrlist, 0); // // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " " << m_fd << std::endl; // ret = erl_rpc_to(m_fd, "syncDB", "findAllDatabase", list); // if (ret == ERL_TICK) { // ret = erl_rpc_from(m_fd, TIMEOUT, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // ETERM *key, *value; // ETERM *tuplep[20]; // ETERM *arr_ret[2], *list_ret[1000]; // ETERM *tail_list, *tail_tuple; // arr_ret[0] = erl_element(2, emsg.msg); // if (checkETERMType(arr_ret[0]) == ERL_LIST) { // int erlLength = erl_length(arr_ret[0]); // list_ret[0] = erl_hd(arr_ret[0]); // tail_list = erl_tl(arr_ret[0]); // for (int i = 0; i < erlLength; i++) { // if (i > 0) { // list_ret[i] = erl_hd(tail_list); // tail_list = erl_tl(tail_list); // } // if (checkETERMType(list_ret[i]) == ERL_LIST) { // SyncDB::Table_Info table_info; // int erlLength1 = erl_length(list_ret[i]); // tuplep[0] = erl_hd(list_ret[i]); // tail_tuple = erl_tl(list_ret[i]); // // for (int j = 0; j < erlLength1; j++) { // if (j > 0) { // tuplep[j] = erl_hd(tail_tuple); // tail_tuple = erl_tl(tail_tuple); // } // key = erl_element(1, tuplep[j]); // value = erl_element(2, tuplep[j]); // switch (checkETERMType(value)) { // case ERL_ATOM: { // table_info.setValue(erl_iolist_to_string(key), ERL_ATOM_PTR(value)); // break; // } // case ERL_INTEGER: { // table_info.setValue(erl_iolist_to_string(key), // std::to_string(ERL_INT_VALUE(value))); // break; // } // case ERL_LIST: { // table_info.setValue(erl_iolist_to_string(key), // erl_iolist_to_string(value)); // break; // } // default: // printf("error add case todo %d\n\r", checkETERMType(value)); // } //// erlangFreeEterm(3, key, value, tuplep[j]); // } //// erlangFreeEterm(2, tail_tuple, list_ret[i]); // // // #todo this is have a bug //// table_info.create_by = ""; // tabDataCache.insert(std::make_pair(table_info.tableName, table_info)); // } else { // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " type error " // << checkETERMType(arr_ret[0]) // << " " // << std::endl; // } // } //// erlangFreeEterm(2, tail_list, arr_ret[0]); // return tabDataCache; //ok // } else { // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << checkETERMType(arr_ret[0]) // << " " // << std::endl; // } // } // } //// erlangFreeEterm(4, emsg.to, emsg.msg, emsg.from, list); // return tabDataCache; //not ok // } // // /*** // * 查询所有表的黑白名单类型 // * @return // */ // map_BwDataCache findAllTypeInfo() { // LockG lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // if (!m_ret) { // //#todo error message // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << m_ret << " " << m_fd << std::endl; // return map_BwDataCache(); // } // map_BwDataCache bwDataCache; // int ret = -1; // ErlMessage emsg; /* Incoming message */ // ETERM *list = erl_mk_empty_list();//erl_mk_list(arrlist, 0); // //// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << m_fd << std::endl; // ret = erl_rpc_to(m_fd, "syncDB", "findAllTypeInfo", list); // if (ret == ERL_TICK) { // ret = erl_rpc_from(m_fd, TIMEOUT, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // ETERM *key, *value; // ETERM *tuplep[20]; // ETERM *arr_ret[2], *list_ret[1000]; // ETERM *tail_list, *tail_tuple; // arr_ret[0] = erl_element(2, emsg.msg); // if (checkETERMType(arr_ret[0]) == ERL_LIST) { // int erlLength = erl_length(arr_ret[0]); //// printf("arr_ret[0]:%d\n", erlLength); // list_ret[0] = erl_hd(arr_ret[0]); // tail_list = erl_tl(arr_ret[0]); // for (int i = 0; i < erlLength; i++) { // if (i > 0) { // list_ret[i] = erl_hd(tail_list); // tail_list = erl_tl(tail_list); // } // if (checkETERMType(list_ret[i]) == ERL_LIST) { // SyncDB::Bw_Info bw_info; // int erlLength1 = erl_length(list_ret[i]); //// printf("list_ret[%d]:%d\n", i, erlLength1); // tuplep[0] = erl_hd(list_ret[i]); // tail_tuple = erl_tl(list_ret[i]); // // for (int j = 0; j < erlLength1; j++) { // if (j > 0) { // tuplep[j] = erl_hd(tail_tuple); // tail_tuple = erl_tl(tail_tuple); // } // key = erl_element(1, tuplep[j]); // value = erl_element(2, tuplep[j]); //// printf("key:%s\n", erl_iolist_to_string(key)); // switch (checkETERMType(value)) { // case ERL_ATOM: { // bw_info.setValue(erl_iolist_to_string(key), ERL_ATOM_PTR(value)); // break; // } // case ERL_INTEGER: { // bw_info.setValue(erl_iolist_to_string(key), // std::to_string(ERL_INT_VALUE(value))); // break; // } // case ERL_LIST: { // bw_info.setValue(erl_iolist_to_string(key), // erl_iolist_to_string(value)); // break; // } // default: // printf("error add case todo %d\n\r", checkETERMType(value)); // } //// erlangFreeEterm(3, key, value, tuplep[j]); // } //// erlangFreeEterm(2, tail_tuple, list_ret[i]); //// printf("\none list end\n\n\n\n"); // // #todo this is have a bug //// bw_info.create_by = ""; // bwDataCache.insert(std::make_pair(bw_info.tableName, bw_info)); // } else { // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " type error " // << checkETERMType(arr_ret[0]) // << " " // << std::endl; // } // } //// erlangFreeEterm(2, tail_list, arr_ret[0]); // return bwDataCache;//ok // } else { // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << checkETERMType(arr_ret[0]) // << " " // << std::endl; // } // } // } //// erlangFreeEterm(4, emsg.to, emsg.msg, emsg.from, list); // return map_BwDataCache(); // } // // /*** // * 增加人员 // * @param UUID out // * @param TableName // * @param Feature // * @param PersonName // * @param Age // * @param Sex // * @param IdCard // * @param PhoneNum // * @return // */ // bool addPerson(std::string &UUID, std::string TableName, std::string Feature, std::string ImgUrl = " ", // std::string IdCard = " ", std::string PersonName = " ", std::string Age = " ", // std::string Sex = " ", std::string PhoneNum = " ") { // LockG lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // if (!m_ret) { // //#todo error message // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << m_ret << " " << m_fd << " " // << Feature << std::endl; // return false; // } // int ret; // ErlMessage emsg; /* Incoming message */ // //hanshu canshu // ETERM *arrlist[9]; // arrlist[0] = erl_mk_atom(TableName.c_str()); // arrlist[1] = erl_mk_atom(PersonName.c_str()); // arrlist[2] = erl_mk_atom(Age.c_str()); // arrlist[3] = erl_mk_atom(Sex.c_str()); // arrlist[4] = erl_mk_atom(IdCard.c_str()); // arrlist[5] = erl_mk_atom(PhoneNum.c_str()); // arrlist[6] = erl_mk_atom(ImgUrl.c_str()); // arrlist[7] = erl_mk_atom(UUID.c_str()); // arrlist[8] = erl_mk_string(Feature.c_str()); // // ETERM *list = erl_mk_list(arrlist, 9); // ret = erl_rpc_to(m_fd, "syncDB", "addPersonData", list); // if (ret == ERL_TICK) { // // ret = erl_rpc_from(m_fd, TIMEOUT, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // ETERM *value; // value = erl_element(2, emsg.msg); // switch (checkETERMType(value)) { // case ERL_LIST: { // UUID = std::string(erl_iolist_to_string(value)); // break; // } // case ERL_ATOM: { // UUID = std::string(ERL_ATOM_PTR(value)); // break; // } // default: // printf("error add case todo \n\r"); // } // erl_free_term(value); // if (UUID.size() > 0) { // erlangFreeEterm(5, emsg.msg, emsg.from, emsg.to, list, arrlist[8]); // erl_free_array(arrlist, 8); // erl_eterm_release(); // return true; // } // } // } // erlangFreeEterm(5, emsg.msg, emsg.from, emsg.to, list, arrlist[8]); // erl_free_array(arrlist, 8); // erl_eterm_release(); // return false; // } // // /*** // * 删除人员 // * @param UUID // * @param TableName // * @return // */ // bool delPerson(std::string UUID, std::string TableName) { // LockG lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // if (!m_ret) { // //#todo error message // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << m_ret << " " << m_fd << " " // << std::endl; // return false; // } // int ret; // ErlMessage emsg; /* Incoming message */ // //hanshu canshu // ETERM *arrlist[2]; // arrlist[0] = erl_mk_atom(TableName.c_str()); // arrlist[1] = erl_mk_atom(UUID.c_str()); // // ETERM *list = erl_mk_list(arrlist, 2); // ret = erl_rpc_to(m_fd, "syncDB", "deletePersonData", list); // if (ret == ERL_TICK) { // ret = erl_rpc_from(m_fd, TIMEOUT, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // std::map t_results; // ETERM *tail_list; // ETERM *list_ret[10], *arr_ret[2]; // ETERM *key, *value; // ETERM *tuplep[6]; // arr_ret[0] = erl_element(2, emsg.msg); // int erlLength = erl_length(arr_ret[0]); // printf("arr_ret[0]:%d\n", erlLength); // list_ret[0] = erl_hd(arr_ret[0]); // tail_list = erl_tl(arr_ret[0]); // for (int i = 0; i < erlLength; i++) { // if (i > 0) { // list_ret[i] = erl_hd(tail_list); // tail_list = erl_tl(tail_list); // } //// printf("list_ret[%d]:%d\n", i, erl_length(list_ret[i])); // tuplep[0] = erl_hd(list_ret[i]); // key = erl_element(1, list_ret[i]); // value = erl_element(2, list_ret[i]); //// printf("key:%s\n", ERL_ATOM_PTR(key)); // switch (checkETERMType(value)) { // case ERL_ATOM: { // int atomSize = ERL_ATOM_SIZE(value); // char *atomValue = ERL_ATOM_PTR(value); // t_results.insert(std::make_pair(ERL_ATOM_PTR(key), atomValue)); //// printf("value is a atom: atomSize:%d, atomValue:%s \n\r", atomSize, atomValue); // break; // } // default: // printf("error add case todo \n\r"); // } // erlangFreeEterm(4, key, value, tuplep[0], list_ret[i]); // } // erlangFreeEterm(2, tail_list, arr_ret[0]); // auto it = t_results.find("atomic"); // if (t_results.size() > 0 && t_results.end() != it && it->second == "ok") { // return true; // } // } // } // erlangFreeEterm(4, emsg.msg, emsg.from, emsg.to, list); // erl_free_array(arrlist, 2); // erl_eterm_release(); // return false; // } // // // /*** // * 根据表名加载人脸特征 // * @param TableName // * @return // */ // map_FaceDataCache loadFaceFeaData(std::string TableName) { // std::lock_guard lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // if (!m_ret) { // //#todo error message // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << m_ret << " " << m_fd << std::endl; // return map_FaceDataCache(); // } // map_FaceDataCache dataCache; // int ret; // ErlMessage emsg; /* Incoming message */ // //hanshu canshu // ETERM *arrlist[1]; // arrlist[0] = erl_mk_atom(TableName.c_str()); // // ETERM *list = erl_mk_list(arrlist, 1); // ret = erl_rpc_to(m_fd, "syncDB", "loadFaceFeaData", list); // // if (ret == ERL_TICK) { // ret = erl_rpc_from(m_fd, TIMEOUT * 100000, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // ETERM *key, *value; // ETERM *tuplep[20]; // ETERM *arr_ret[2], *list_ret[5000]; // ETERM *tail_list, *tail_tuple; // arr_ret[0] = erl_element(2, emsg.msg); // if (checkETERMType(arr_ret[0]) == ERL_LIST) { // int erlLength = erl_length(arr_ret[0]); //// printf("arr_ret[0]:%d\n", erlLength); // list_ret[0] = erl_hd(arr_ret[0]); // tail_list = erl_tl(arr_ret[0]); // for (int i = 0; i < erlLength; i++) { //// DBG(i); // if (i > 0) { // list_ret[i] = erl_hd(tail_list); // tail_list = erl_tl(tail_list); // } // if (tail_list == NULL) // break; // if (checkETERMType(list_ret[i]) == ERL_LIST) { // SyncDB::Feature_Info feature_info; //// feature_info.id = "test"; //// feature_info.create_by = ""; //// feature_info.feature =""; //// feature_info.update_time = ""; //// feature_info.create_time = ""; // // int erlLength1 = erl_length(list_ret[i]); //// printf("list_ret[%d]:%d\n", i, erlLength1); // tuplep[0] = erl_hd(list_ret[i]); // tail_tuple = erl_tl(list_ret[i]); // // for (int j = 0; j < erlLength1; j++) { // if (j > 0) { // tuplep[j] = erl_hd(tail_tuple); // tail_tuple = erl_tl(tail_tuple); // } // key = erl_element(1, tuplep[j]); // value = erl_element(2, tuplep[j]); //// printf("key:%s\n", erl_iolist_to_string(key)); // // switch (checkETERMType(value)) { // case ERL_ATOM: { // feature_info.setValue(erl_iolist_to_string(key), ERL_ATOM_PTR(value)); // break; // } // case ERL_LIST: { // feature_info.setValue(erl_iolist_to_string(key), // erl_iolist_to_string(value)); // break; // } // default: // printf("error add case todo %d\n\r", checkETERMType(value)); // } // //// erlangFreeEterm(2, key, value); // } //// printf("\none list end\n\n\n\n"); // dataCache.insert(std::move(std::make_pair(feature_info.id, feature_info))); //// break; //// erlangFreeEterm(1, list_ret[i]); // } else { // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " type error " // << checkETERMType(list_ret[i]) // << " " // << std::endl; // } // } // erlangFreeEterm(5, emsg.msg, emsg.from, emsg.to, list, arrlist[0]); // erl_eterm_release(); //// sleep() // return dataCache; // } else { // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << checkETERMType(arr_ret[0]) // << " " // << std::endl; // } // } else { // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << ret << " " << std::endl; // } // // } // erlangFreeEterm(5, emsg.msg, emsg.from, emsg.to, list, arrlist[0]); // erl_eterm_release(); // return map_FaceDataCache(); // }; // // // /*** // * 根据表名加载人脸特征2 // * @param TableName // * @return // */ // map_FaceDataCache loadFaceFeaData2(std::string TableName) { // std::lock_guard lock(m_mutex); //// m_mutex.lock(); // m_ret = resetConn(); // if (!m_ret) { // //#todo error message // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << m_ret << " " << m_fd << std::endl; // return map_FaceDataCache(); // } // map_FaceDataCache dataCache; // int ret; // ErlMessage emsg; /* Incoming message */ // //hanshu canshu // ETERM *arrlist[1]; // arrlist[0] = erl_mk_atom(TableName.c_str()); // // ETERM *list = erl_mk_list(arrlist, 1); // ret = erl_rpc_to(m_fd, "syncDB", "loadFaceFeaData2", list); // // if (ret == ERL_TICK) { // ret = erl_rpc_from(m_fd, TIMEOUT * 100000, &emsg); //// m_mutex.unlock(); // if (ret == ERL_MSG) { // ETERM *key, *value; // ETERM *tuplep[20]; // ETERM *arr_ret[2], *list_ret[5000]; // ETERM *tail_list, *tail_tuple; // arr_ret[0] = erl_element(2, emsg.msg); // if (checkETERMType(arr_ret[0]) == ERL_LIST) { // int erlLength = erl_length(arr_ret[0]); //// printf("arr_ret[0]:%d\n", erlLength); // list_ret[0] = erl_hd(arr_ret[0]); // tail_list = erl_tl(arr_ret[0]); // for (int i = 0; i < erlLength; i++) { //// DBG(i); // if (i > 0) { // list_ret[i] = erl_hd(tail_list); // tail_list = erl_tl(tail_list); // } // if (tail_list == NULL) // break; // if (checkETERMType(list_ret[i]) == ERL_LIST) { // SyncDB::Feature_Info feature_info; //// feature_info.id = "test"; //// feature_info.create_by = ""; //// feature_info.feature =""; //// feature_info.update_time = ""; //// feature_info.create_time = ""; // // int erlLength1 = erl_length(list_ret[i]); //// printf("list_ret[%d]:%d\n", i, erlLength1); // tuplep[0] = erl_hd(list_ret[i]); // tail_tuple = erl_tl(list_ret[i]); // // for (int j = 0; j < erlLength1; j++) { // if (j > 0) { // tuplep[j] = erl_hd(tail_tuple); // tail_tuple = erl_tl(tail_tuple); // } // key = erl_element(1, tuplep[j]); // value = erl_element(2, tuplep[j]); //// printf("key:%s\n", erl_iolist_to_string(key)); // // switch (checkETERMType(value)) { // case ERL_ATOM: { // feature_info.setValue(erl_iolist_to_string(key), ERL_ATOM_PTR(value)); // break; // } // case ERL_LIST: { // feature_info.setValue(erl_iolist_to_string(key), // erl_iolist_to_string(value)); // break; // } // default: // printf("error add case todo %d\n\r", checkETERMType(value)); // } // //// erlangFreeEterm(2, key, value); // } //// printf("\none list end\n\n\n\n"); // dataCache.insert(std::move(std::make_pair(feature_info.id, feature_info))); //// break; //// erlangFreeEterm(1, list_ret[i]); // } else { // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " type error " // << checkETERMType(list_ret[i]) // << " " // << std::endl; // } // } // erlangFreeEterm(5, emsg.msg, emsg.from, emsg.to, list, arrlist[0]); // erl_eterm_release(); //// sleep() // return dataCache; // } else { // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << checkETERMType(arr_ret[0]) // << " " // << std::endl; // } // } else { // std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << ret << " " << std::endl; // } // // } // erlangFreeEterm(5, emsg.msg, emsg.from, emsg.to, list, arrlist[0]); // erl_eterm_release(); // return map_FaceDataCache(); // }; // //// private: // /*** // * 重新连接节点 // * @return 连接状态 // */ // bool resetConn() { // //#todo // if (m_pName.size() <= 0) { // srand(time(0)); // m_loop = rand() % 1000; // // int ret = -1; // erl_init(NULL, 0); //// m_loop %= 10; //// m_loop++; // ret = erl_connect_init(m_loop, const_cast(m_cookie.c_str()), 0); // DBG("node name is " << m_loop); // if (-1 == ret) { //// erl_err_quit("erl_connect_init"); // return false; // } // //// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << m_fd << std::endl; // erl_close_connection(m_fd); //// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << m_fd << std::endl; // m_fd = erl_connect(const_cast(m_nodeName.c_str())); //// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << m_fd << std::endl; // if (0 > m_fd) { //// erl_err_quit("erl_connect"); // return false; // } // return true; // } else { // erl_close_connection(m_fd); // m_fd = erl_connect(const_cast(m_nodeName.c_str())); // if (0 > m_fd) { //// erl_err_quit("erl_connect"); //// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " error " << fd << std::endl; //// ERR("node name is " << m_loop); // return false; // } //// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << fd << std::endl; // return true; // } // } // // /*** // * 等待节点启动,阻塞 // * @return // */ // bool waitNode() { // std::cout << "start waitNode" << std::endl; // int loop = 0; // while (!m_ret && loop <= 4000) { // m_ret = ErlangTool::pingNode(m_nodeName, m_cookie); // if (m_ret) { //// std::cout << "startNodeDb" << std::endl; // } else { //// std::cout << "init failer" << std::endl; // usleep(1000); // loop++; // } // } // std::cout << "start waitNode" << std::endl; // return m_ret; // } // // public: // // private: // //存储路径 // std::string m_path; // std::string m_nodeName; // std::string m_pName; // std::string m_cookie; // // std::string m_clusterID; // std::string m_clusterName; // // bool m_ret; // int m_fd; // // std::mutex m_mutex; // }; // //} // //#endif //UNTITLED_ERLANGTOOL_HPP