From dccc1ca1304dc1fcb86c8e24edd491509269b3e7 Mon Sep 17 00:00:00 2001
From: cheliequan <liequanche@126.com>
Date: 星期日, 29 一月 2023 14:44:52 +0800
Subject: [PATCH] 解决编译告警

---
 util.h |  209 +++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 140 insertions(+), 69 deletions(-)

diff --git a/util.h b/util.h
index 4521fb7..e7b8702 100644
--- a/util.h
+++ b/util.h
@@ -8,15 +8,15 @@
 #include "google/protobuf/util/type_resolver.h"
 #include "google/protobuf/util/type_resolver_util.h"
 
-#include "google/protobuf/message.h"
+#include "google/protobuf/compiler/importer.h"
 #include "google/protobuf/descriptor.h"
 #include "google/protobuf/descriptor.pb.h"
 #include "google/protobuf/dynamic_message.h"
-#include "google/protobuf/compiler/importer.h"
+#include "google/protobuf/message.h"
 
-#include "3rdparty/yyjson/yyjson.h"
 #include "3rdparty/bus_client/cbhomeclient.h"
 #include "3rdparty/bus_client/message.h"
+#include "3rdparty/yyjson/yyjson.h"
 #include "proto/x86_64/sysset.pb.h"
 #include <vector>
 
@@ -24,90 +24,161 @@
 using namespace std;
 using google::protobuf::util::JsonStringToMessage;
 
+bool json_to_proto(const std::string &json, google::protobuf::Message &message);
+bool proto_to_json(const google::protobuf::Message &message, std::string &json);
 
-bool json_to_proto(const std::string &json, google::protobuf::Message& message);
-bool proto_to_json(const google::protobuf::Message& message, std::string& json);
 char *make_get_request(const char *topic);
-bool bus_dbapi_get(void *handle, const char* topic, google::protobuf::Message& message);
-bool bus_dbapi_get_topic_data(void *handle, const char* topic, crepmsg **pptr_repmsg, size_t len);
-extern "C" int bus_dbapi_get_json_data(const char * json, char ** pptr_data, uint8_t *ptr_type);
-template <class T>  bool bus_dbapi_get_list (void *handle, const char* topic, T & list)
+char *make_get_request(const char *topic, const std::map<string, string> *query_params);
 
+bool bus_dbapi_get(void *handle, const char *topic, google::protobuf::Message &message);
+bool bus_dbapi_get_topic_data(void *handle, const char *topic, crepmsg **pptr_repmsg, size_t len);
+bool bus_dbapi_get_topic_data(void *handle, const char *topic, crepmsg **pptr_repmsg, size_t len, std::map<string, string> &params);
+extern "C" int bus_dbapi_get_json_data_by_key(const char *json, const char *flag_key, const char *data_key, char **pptr_data, yyjson_type *ptr_type);
+extern "C" int bus_dbapi_get_json_data(const char *json, char **pptr_data, uint8_t *ptr_type);
+bool bus_dbapi_get_str(void *handle, const char *topic, char **pptr_str);
+int get_value_by_key(char *json, const char *key, char **pptr_data);
+
+
+template <class T>
+bool bus_dbapi_get_json( T &list, string &json) 
 {
+    using TMPT = typename std::remove_reference<decltype(*list.begin())>::type;
+    TMPT t;
+    string jsonString;
+    int len = list.size();
+    bool bRet = false;
+    jsonString += "[";
+	
+    for ( int i= 0 ; i < len ; i++ )
+    {
+     	string tmpjsonString;
+        bRet = proto_to_json(list[i], tmpjsonString);
+		if ( (len > 1) &&(i < len - 1))
+		{
+		    tmpjsonString += ",";
+		}
+		jsonString += tmpjsonString;
+    }	
 
-	char * ptr_value = NULL;
-	size_t data_len = 0;
+    jsonString += "]";
+
+    json = jsonString;
+    return bRet;
+}
+
+
+template <class T>
+bool bus_dbapi_get_list(char *json, const char *flag_key, const char *data_key, T &list) {
+    char *ptr_value = NULL;
+    size_t data_len = 0;
     //get the topic json data
-	yyjson_type type = YYJSON_TYPE_OBJ;
-	crepmsg *repmsg = NULL;
-    size_t len = 0;
-	//T t;
-	//typedef decltype(list) vec_type;
-	
-	using TMPT = typename std::remove_reference<decltype(*list.begin())>::type;
-	TMPT t;
-	//vec_type::value_type t;
-	int ret = 0;
-	
-	ret = bus_dbapi_get_topic_data(handle, topic, &repmsg, len);
-    if ( ret < 0 || NULL == repmsg)
-    {
-        return false;
-    }
+    yyjson_type type = YYJSON_TYPE_OBJ;
 
-	//parse the json to get value of the key "data"  
-    int msglen = strlen(repmsg->data);
-    char* msgdata = (char *)malloc(msglen);
-    memset(msgdata, 0 , msglen);
+    using TMPT = typename std::remove_reference<decltype(*list.begin())>::type;
+    TMPT t;
 
-    if(0 == bus_dbapi_get_json_data((const char *)repmsg->data, &msgdata, &type))
-    {
-        printf("======>> protomsg: %s\n", msgdata);            
+    //parse the json to get value of the key "data"
+    int msglen = strlen(json);
+    char *msgdata = (char *)malloc(msglen);
+    memset(msgdata, 0, msglen);
+
+    if (0 == bus_dbapi_get_json_data_by_key(json, flag_key, data_key, &msgdata, &type)) {
+        printf("======>> protomsg: %s\n", msgdata);
     }
 
     //iterate the array  to get the protobuf message
-	if (YYJSON_TYPE_ARR == type)
-	{
+    if (YYJSON_TYPE_ARR == type) {
 
-        printf("======>> deal the ARRAY\n"); 
-		// Read JSON and get root
-		yyjson_doc *doc = yyjson_read(msgdata, strlen(msgdata), 0);
-		yyjson_val *arr = yyjson_doc_get_root(doc);
+        printf("======>> deal the ARRAY\n");
+        // Read JSON and get root
+        yyjson_doc *doc = yyjson_read(msgdata, strlen(msgdata), 0);
+        yyjson_val *arr = yyjson_doc_get_root(doc);
 
-        //yyjson_val *arr = yyjson_obj_get(root, "data"); 
-		yyjson_val *val;
-		yyjson_arr_iter iter;
-		yyjson_arr_iter_init(arr, &iter);
-		while ((val = yyjson_arr_iter_next(&iter)))
-		{		
-			data_len = 0;
-			ptr_value = yyjson_val_write(val, YYJSON_WRITE_NOFLAG, &data_len); 
-			printf("data: %s\n", ptr_value);	
-			printf("len: %lu\n", data_len);  
+        //yyjson_val *arr = yyjson_obj_get(root, "data");
+        yyjson_val *val;
+        yyjson_arr_iter iter;
+        yyjson_arr_iter_init(arr, &iter);
+        while ((val = yyjson_arr_iter_next(&iter))) {
+            data_len = 0;
+            ptr_value = yyjson_val_write(val, YYJSON_WRITE_NOFLAG, &data_len);
+            printf("data: %s\n", ptr_value);
+            printf("len: %lu\n", data_len);
 
-			std::string jsonString = ptr_value;			
-			if (json_to_proto(jsonString, t)) 
-			{
-				printf("======>> json_to_proto done\n");
-				list.push_back(t);
-			} 
-			else
-			{
-				printf("======>> json_to_proto fail\n");
-			    yyjson_doc_free(doc);
-            	free_reply_msg(repmsg);				
-			    free(msgdata);				
-				return false;
-			} 		
-		}
+            std::string jsonString = ptr_value;
+            if (json_to_proto(jsonString, t)) {
+                printf("======>> json_to_proto done\n");
+                list.push_back(t);
+            } else {
+                printf("======>> json_to_proto fail\n");
+                yyjson_doc_free(doc);
+                free(msgdata);
+                return false;
+            }
+        }
 
-		// Free the doc
+        // Free the doc
         yyjson_doc_free(doc);
-	}
+    }
 
     free(msgdata);
-	free_reply_msg(repmsg);
 
     return true;
-} 
+}
+
+template <class T>
+bool bus_dbapi_get_list(char *json, T &list) {
+    const char *success_name = "success";
+    const char *data_name = "data";
+
+    return bus_dbapi_get_list(json, success_name, data_name, list);
+}
+
+template <class T>
+bool bus_dbapi_get_list(char *json, bool is_array, T &list) {
+    char *success_name = NULL;
+    char *data_name = NULL;   
+    if ( is_array )
+    {
+	    success_name = NULL;
+	    data_name = NULL;        
+    }
+	else
+	{
+	    success_name = (char *)"success";
+	    data_name = (char *)"data";   	    
+	}
+
+    return bus_dbapi_get_list(json, (const char *)success_name, (const char *)data_name, list);
+}
+
+template <class T>
+bool bus_dbapi_get_list(void *handle, const char *topic, T &list) {
+    crepmsg *repmsg = NULL;
+    size_t len = 0;
+    bool iRet = false;
+    iRet = bus_dbapi_get_topic_data(handle, topic, &repmsg, len);
+    if ((false == iRet) || (NULL == repmsg)) {
+        return false;
+    }
+
+    iRet = bus_dbapi_get_list(repmsg->data, list);
+    free_reply_msg(repmsg);
+    return iRet;
+}
+
+template <class T>
+bool bus_dbapi_get_list(void *handle, const char *topic, T &list, std::map<string, string> &params) {
+    crepmsg *repmsg = NULL;
+    size_t len = 0;
+    bool iRet = false;
+    iRet = bus_dbapi_get_topic_data(handle, topic, &repmsg, len, params);
+    if ((false == iRet) || (NULL == repmsg)) {
+        return false;
+    }
+
+    iRet = bus_dbapi_get_list(repmsg->data, list);
+    free_reply_msg(repmsg);
+    return iRet;
+}
+
 #endif

--
Gitblit v1.8.0