Files
microser/cfg_parse/nacos.cpp
2025-05-09 16:53:07 +08:00

659 lines
25 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file: $RCSfile: nacos.cpp,v $
* @brief: $aliyun datahub include
*
* @version: $Revision: 1.00 $
* @date: $Date: 2023/10/24 18:34:00 $
* @author: $Author: wangwei $
* @state: $State: Exp $
*
* @latest: $Id: nacos.cpp,v 1.00 2023/10/24 18:34:00 caizhouyu Exp $
*
*/
using namespace std;
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string>
#include "../mms/db_interface.h"
#include "../json/cjson.h"//WW 2023-08-27新增json解析函数
#include "../include/curl/curl.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
size_t req_reply_nacos(void* ptr, size_t size, size_t nmemb, void* stream)
{
string* str = (string*)stream;
(*str).append((char*)ptr, size * nmemb);
return size * nmemb;
}
void read_nacos_param(const char* ptr, char* postgres_uid, char* postgres_pwd, char* web_clientid, char* web_clientsecret) {
//cout << ">>>GetDevice in reply" << (char*)ptr;
int flag = 1;
cJSON* json = cJSON_Parse((char*)ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error %s\n", cJSON_GetErrorPtr());
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || json_node->valuestring == NULL || json_node->valuestring == "/0" || json_node->valuestring == "" || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || json_node->valuestring == NULL || json_node->valuestring == "/0" || json_node->valuestring == "" || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "postgres_uid"); //获取result
if (json_node != NULL && strcmp(json_node->valuestring, "null") != 0) {
strcpy(postgres_uid, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "postgres_pwd"); //获取result
if (json_node != NULL && strcmp(json_node->valuestring, "null") != 0) {
strcpy(postgres_pwd, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "web_clientid"); //获取result
if (json_node != NULL && strcmp(json_node->valuestring, "null") != 0) {
strcpy(web_clientid, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "web_clientsecret"); //获取result
if (json_node != NULL && strcmp(json_node->valuestring, "null") != 0) {
strcpy(web_clientsecret, json_node->valuestring);
}
}
}
cJSON_Delete(json);
}
void releaseMemory(char** ptr) {
if (*ptr != NULL) {
free(*ptr); // 释放内存
}
}
void SendWebAPI_Nacos(const string strUrl, const char* code, char* postgres_uid, char* postgres_pwd, char* web_clientid, char* web_clientsecret)
{
// curl初始化
CURL* curl = curl_easy_init();
// curl返回值
CURLcode res;
if (curl)
{
//设置curl的请求头
struct curl_slist* header_list = NULL;
header_list = curl_slist_append(header_list, "Content-Type:application/json;");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
//不接收响应头数据0代表不接收 1代表接收
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
//设置请求为post请求
curl_easy_setopt(curl, CURLOPT_POST, 1);
//设置请求的URL地址
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
//设置post请求的参数
cJSON* json_root = cJSON_CreateObject();
cJSON_AddItemToObject(json_root, "code", cJSON_CreateString(code));
char* szjson = cJSON_Print(json_root);
printf(">>>json %s\n", szjson);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, szjson);
//设置ssl验证
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
//CURLOPT_VERBOSE的值为1时会显示详细的调试信息
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
//设置数据接收和写入函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_nacos);
string resPost0;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&resPost0);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
//设置超时时间
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
printf(">>>Test nacos Post in curl post\n");
// 开启post请求
res = curl_easy_perform(curl);
// 检查请求是否成功
if (res != CURLE_OK) {
printf("nacos failed res code: ");
}
else {
printf("nacos success,string %s", resPost0.c_str());
//后期添加webapi返回值判断
read_nacos_param(resPost0.c_str(), postgres_uid, postgres_pwd, web_clientid, web_clientsecret);
}
curl_slist_free_all(header_list);
free(szjson);
cJSON_Delete(json_root);
}
else
{
printf(">>> nacos curl init failed");
}
curl_easy_cleanup(curl);
}
void SendWebAPI_Nacos_Ptr(const string strUrl, const char* code, char** ptr)
{
// curl初始化
CURL* curl = curl_easy_init();
// curl返回值
CURLcode res;
if (curl)
{
char url[100];
sprintf(url, "%s?code=%s", strUrl.c_str(), code);
printf(">>>json %s\n", url);
// 设置URL
curl_easy_setopt(curl, CURLOPT_URL, url);
//设置数据接收和写入函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_nacos);
string resPost0;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&resPost0);
//设置超时时间
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
// 开启post请求
res = curl_easy_perform(curl);
// 检查请求是否成功
if (res != CURLE_OK) {
printf("nacos failed res code: ");
}
else {
printf(">>> nacos return str:%s \n", resPost0.c_str());
*ptr = (char*)malloc(strlen(resPost0.c_str()) + 1); // 分配足够的内存空间
if (*ptr != NULL) {
strcpy(*ptr, resPost0.c_str());
}
else {
printf("Memory allocation failed!\n");
}
}
}
else
{
printf(">>> nacos curl init failed");
}
curl_easy_cleanup(curl);
}
void Nacos_GetParam(char* postgres_uid, char* postgres_pwd, char* web_clientid, char* web_clientsecret)
{
SendWebAPI_Nacos("http://127.0.0.1:8091/powerQuality/PQNACOS", "200", postgres_uid, postgres_pwd, web_clientid, web_clientsecret);
}
void Nacos_GetParam_Ptr(const char* code, char** ptr)
{
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", code, ptr);
}
void Read_Nacos_Param_Postgres(char** database_ip, char** database_port, char** postgres_database, char** postgres_username, char** postgres_password, char** postgres_schema, char** postgres_dnsname, char** postgres_tableprefix) {
char* ptr=NULL;
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", "postgres", &ptr);
int flag = 1;
cJSON* json = cJSON_Parse(ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error %s\n", cJSON_GetErrorPtr());
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "ip"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*database_ip != NULL) {
// 如果已经分配了内存,则释放内存
free(*database_ip);
}
*database_ip = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*database_ip, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "port"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*database_port != NULL) {
// 如果已经分配了内存,则释放内存
free(*database_port);
}
*database_port = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*database_port, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "database"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*postgres_database != NULL) {
// 如果已经分配了内存,则释放内存
free(*postgres_database);
}
*postgres_database = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*postgres_database, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "username"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*postgres_username != NULL) {
// 如果已经分配了内存,则释放内存
free(*postgres_username);
}
*postgres_username = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*postgres_username, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "password"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*postgres_password != NULL) {
// 如果已经分配了内存,则释放内存
free(*postgres_password);
}
*postgres_password = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*postgres_password, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "schema"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*postgres_schema != NULL) {
// 如果已经分配了内存,则释放内存
free(*postgres_schema);
}
*postgres_schema = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*postgres_schema, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "dnsname"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*postgres_dnsname != NULL) {
// 如果已经分配了内存,则释放内存
free(*postgres_dnsname);
}
*postgres_dnsname = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*postgres_dnsname, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "tablePrefix"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*postgres_tableprefix != NULL) {
// 如果已经分配了内存,则释放内存
free(*postgres_tableprefix);
}
*postgres_tableprefix = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*postgres_tableprefix, json_node->valuestring);
}
}
}
if (ptr) {
free(ptr);
}
cJSON_Delete(json);
}
void Read_Nacos_Param_Kafka(char** broker_list, char** topic_stat, char** topic_pst, char** topic_plt, char** topic_event, char** topic_alarm, char** topic_sng,char** protocol ,char** mechanisms, char** service_name, char** principal, char** domain_name) {
char* ptr = NULL;
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", "kafka", &ptr);
int flag = 1;
cJSON* json = cJSON_Parse(ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error %s\n", cJSON_GetErrorPtr());
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "brokerList"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*broker_list != NULL) {
// 如果已经分配了内存,则释放内存
free(*broker_list);
}
*broker_list = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*broker_list, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "hisTopic"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*topic_stat != NULL) {
// 如果已经分配了内存,则释放内存
free(*topic_stat);
}
*topic_stat = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*topic_stat, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "pstTopic"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*topic_pst != NULL) {
// 如果已经分配了内存,则释放内存
free(*topic_pst);
}
*topic_pst = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*topic_pst, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "pltTopic"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*topic_plt != NULL) {
// 如果已经分配了内存,则释放内存
free(*topic_plt);
}
*topic_plt = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*topic_plt, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "eventTopic"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*topic_event != NULL) {
// 如果已经分配了内存,则释放内存
free(*topic_event);
}
*topic_event = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*topic_event, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "almTopic"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*topic_alarm != NULL) {
// 如果已经分配了内存,则释放内存
free(*topic_alarm);
}
*topic_alarm = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*topic_alarm, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "sngTopic"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*topic_sng != NULL) {
// 如果已经分配了内存,则释放内存
free(*topic_sng);
}
*topic_sng = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*topic_sng, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "protocol"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*protocol != NULL) {
// 如果已经分配了内存,则释放内存
free(*protocol);
}
*protocol = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*protocol, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "mechanisms"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*mechanisms != NULL) {
// 如果已经分配了内存,则释放内存
free(*mechanisms);
}
*mechanisms = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*mechanisms, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "serviceName"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*service_name != NULL) {
// 如果已经分配了内存,则释放内存
free(*service_name);
}
*service_name = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*service_name, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "principal"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*principal != NULL) {
// 如果已经分配了内存,则释放内存
free(*principal);
}
*principal = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*principal, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "domainName"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*domain_name != NULL) {
// 如果已经分配了内存,则释放内存
free(*domain_name);
}
*domain_name = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*domain_name, json_node->valuestring);
}
}
}
cJSON_Delete(json);
}
void Read_Nacos_Param_Web(char** client_id, char** client_secret, char** token_url, char** device_url, char** grant_type) {
char* ptr = NULL;
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", "web", &ptr);
int flag = 1;
cJSON* json = cJSON_Parse(ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error %s\n", cJSON_GetErrorPtr());
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "clientId"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*client_id != NULL) {
// 如果已经分配了内存,则释放内存
free(*client_id);
}
*client_id = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*client_id, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "clientSecret"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*client_secret != NULL) {
// 如果已经分配了内存,则释放内存
free(*client_secret);
}
*client_secret = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*client_secret, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "tokenUrl"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*token_url != NULL) {
// 如果已经分配了内存,则释放内存
free(*token_url);
}
*token_url = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*token_url, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "deviceUrl"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*device_url != NULL) {
// 如果已经分配了内存,则释放内存
free(*device_url);
}
*device_url = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*device_url, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "grantType"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*grant_type != NULL) {
// 如果已经分配了内存,则释放内存
free(*grant_type);
}
*grant_type = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*grant_type, json_node->valuestring);
}
}
}
cJSON_Delete(json);
}
void Read_Nacos_Param_Flag(int* file_flag, int* send_flag, int* front_inst, char** front_ip) {
char* ptr = NULL;
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", "flag", &ptr);
int flag = 1;
cJSON* json = cJSON_Parse(ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error: %s\n", ptr);
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "fileFlag"); //获取result
if (json_node && json_node->type == cJSON_String) {
*file_flag= atoi(json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "sendFlag"); //获取result
if (json_node && json_node->type == cJSON_String) {
*send_flag = atoi(json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "frontInst"); //获取result
if (json_node && json_node->type == cJSON_String) {
*front_inst = atoi(json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "frontIP"); //获取result
if (json_node && json_node->type == cJSON_String) {
//***postgres_pwd = json_node->valuestring;
if (*front_ip != NULL) {
// 如果已经分配了内存,则释放内存
free(*front_ip);
}
*front_ip = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*front_ip, json_node->valuestring);
}
}
}
cJSON_Delete(json);
}
void Read_Nacos_Param_Recall(int* recall_len, int* recall_sta, int* recall_daily) {
char* ptr = NULL;
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", "recall", &ptr);
int flag = 1;
cJSON* json = cJSON_Parse(ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error %s\n", cJSON_GetErrorPtr());
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "recall_lenth"); //获取result
if (json_node && json_node->type == cJSON_String) {
*recall_len = atoi(json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "recall_start"); //获取result
if (json_node && json_node->type == cJSON_String) {
*recall_sta = atoi(json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "recall_dailytime"); //获取result
if (json_node && json_node->type == cJSON_String) {
*recall_daily = atoi(json_node->valuestring);
}
}
}
cJSON_Delete(json);
}
void Read_Nacos_Param_Uds(char** uds_upload_url, char** uds_download_url, char** uds_delete_url) {
char* ptr = NULL;
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", "uds", &ptr);
int flag = 1;
cJSON* json = cJSON_Parse(ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error %s\n", cJSON_GetErrorPtr());
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "udsUploadUrl"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*uds_upload_url != NULL) {
// 如果已经分配了内存,则释放内存
free(*uds_upload_url);
}
*uds_upload_url = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*uds_upload_url, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "udsDownloadUrl"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*uds_download_url != NULL) {
// 如果已经分配了内存,则释放内存
free(*uds_download_url);
}
*uds_download_url = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*uds_download_url, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "UdsDeleteUrl"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*uds_delete_url != NULL) {
// 如果已经分配了内存,则释放内存
free(*uds_delete_url);
}
*uds_delete_url = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*uds_delete_url, json_node->valuestring);
}
}
}
cJSON_Delete(json);
}
#ifdef __cplusplus
}
#endif