add function:upload and download device file ,modify interface function fix memleak
This commit is contained in:
@@ -2931,6 +2931,7 @@ void Set_xml_databaseinfo(char* MODEL_ID, char* TMNL_TYPE, char* FILE_PATH, char
|
||||
{
|
||||
Xmldata* config2 = new Xmldata();
|
||||
xmlinfo_list2.insert(type, config2);
|
||||
xmlinfo_list2[type]->updataflag = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2952,35 +2953,30 @@ void Set_xml_databaseinfo(char* MODEL_ID, char* TMNL_TYPE, char* FILE_PATH, char
|
||||
|
||||
char file_name[256];
|
||||
memset(file_name, 0, 256);
|
||||
sprintf(file_name, "%s", FILE_NAME);
|
||||
snprintf(file_name, sizeof(file_name), "%s", FILE_NAME);
|
||||
file_name[sizeof(file_name) - 1] = '\0';
|
||||
QString Qsavename;
|
||||
Qsavename.append("/FeProject/dat/").append(id).append(".xml"); //本地保存路径
|
||||
char save_name[256];
|
||||
memset(save_name, 0, 256);
|
||||
sprintf(save_name, "%s", Qsavename.toAscii().data());
|
||||
snprintf(save_name, sizeof(save_name), "%s", Qsavename.toAscii().data());
|
||||
save_name[sizeof(save_name) - 1] = '\0';
|
||||
cout << file_name << "!!!!!!!!!!!!!!!!!!!!!!!!!!" << save_name << endl;
|
||||
|
||||
//mq日志
|
||||
DIY_WARNLOG_CODE("process",LOG_CODE_ICD_AND_DOWNLOAD,"【WARN】前置获取到终端类型%s,该终端类型对应的映射文件为%s,映射文件将下载并保存在本地为%s",TMNL_TYPE,FILE_PATH,save_name);
|
||||
|
||||
//20241028 lnk 替换为文件下载web接口
|
||||
//构造文件下载接口参数
|
||||
//接口示例http://192.168.1.125:10215/file/download?filePath=/path/xxx.txt
|
||||
|
||||
// 调用web获取文件内容
|
||||
char* fileContent = NULL;
|
||||
|
||||
//测试下载
|
||||
//char downpath[128] = {"/home/pq/FeProject/src/pt61850netd_pqfe_lnk/download/123.txt"};
|
||||
//char download[128] = {"{\"filename\":\"file_test.txt\"}"};
|
||||
//SendJsonAPI_web("http://192.168.1.149:8091/file/download", "", download, &fileContent);
|
||||
|
||||
std::string fullPath = std::string("filePath=") + std::string(FILE_PATH);
|
||||
|
||||
//调试用
|
||||
std::cout << "fullpath" << fullPath << std::endl;
|
||||
|
||||
SendJsonAPI_web(WEB_FILEDOWNLOAD, fullPath.c_str(), "", &fileContent);
|
||||
if (fileContent != NULL) {
|
||||
if (fileContent != NULL && fileContent[0] != '\0') {
|
||||
// 创建并打开文件
|
||||
|
||||
//判断返回的是不是错误json响应
|
||||
@@ -3459,18 +3455,19 @@ static void scanAndResendOfflineFiles(const std::string &dirPath)
|
||||
// 尝试发送
|
||||
char* ptr = NULL; // 接收返回
|
||||
SendJsonAPI_web(WEB_EVENT, "", jsonContent.c_str(), &ptr);
|
||||
if (ptr != NULL) {
|
||||
if (ptr != NULL && ptr[0] != '\0') {
|
||||
|
||||
cJSON* j_r = cJSON_Parse(ptr);
|
||||
if (j_r == NULL) {
|
||||
std::cout << "old file send fail" << std::endl;
|
||||
// 表示有响应,则可视为成功;根据项目需要可加更精细的判断
|
||||
handleCommentResponse(std::string(ptr));
|
||||
|
||||
|
||||
DIY_WARNLOG_CODE("process",LOG_CODE_TRANSIENT_COMM,"【WARN】前置重发暂态事件失败");
|
||||
|
||||
}
|
||||
else{
|
||||
// 表示有响应,则可视为成功;根据项目需要可加更精细的判断
|
||||
handleCommentResponse(std::string(ptr));
|
||||
|
||||
DIY_WARNLOG_CODE("process",LOG_CODE_TRANSIENT_COMM,"【WARN】前置重发暂态事件成功");
|
||||
|
||||
@@ -3478,7 +3475,7 @@ static void scanAndResendOfflineFiles(const std::string &dirPath)
|
||||
// 删除文件
|
||||
remove(fileList[i].fileName.c_str());
|
||||
|
||||
free(j_r);
|
||||
cJSON_Delete(j_r);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3524,7 +3521,7 @@ char* mp_id,char* Qvvr_rptname,char* devtype)
|
||||
c_xmlcfg = xmlcfg;
|
||||
}
|
||||
|
||||
if (strlen(mp_id) == 0) {
|
||||
if (NULL == mp_id || strlen(mp_id) == 0 ) {
|
||||
std::cout << "mp_id is null" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
@@ -3567,6 +3564,12 @@ char* mp_id,char* Qvvr_rptname,char* devtype)
|
||||
}
|
||||
|
||||
char* json_string = cJSON_Print(root);
|
||||
if (json_string == NULL) {
|
||||
DIY_ERRORLOG_CODE(full_key_m_d,LOG_CODE_TRANSIENT_COMM,"【ERROR】监测点:%s暂态事件生成JSON字符串失败",mp_id);
|
||||
std::cerr << "Failed to print JSON object." << std::endl;
|
||||
cJSON_Delete(root);
|
||||
return 0;
|
||||
}
|
||||
printf("%s\n", json_string); // 输出 JSON 字符串
|
||||
|
||||
// 发送到暂态接口
|
||||
@@ -3575,7 +3578,7 @@ char* mp_id,char* Qvvr_rptname,char* devtype)
|
||||
|
||||
// ================ 插入新功能 =========================
|
||||
// ********** 新增功能开始 **********
|
||||
if(ptr != NULL)
|
||||
if(ptr != NULL && ptr[0] != '\0')
|
||||
{
|
||||
cJSON* j_r = cJSON_Parse(ptr);
|
||||
// 如果发送失败(j_r == NULL),则把当前 json 存入指定目录(/FeProject/dat/qvvr/)
|
||||
@@ -3604,13 +3607,13 @@ char* mp_id,char* Qvvr_rptname,char* devtype)
|
||||
|
||||
// 把 json_string 写入文件
|
||||
if(!writeJsonToFile(fileName.c_str(), json_string)){
|
||||
DIY_ERRORLOG_CODE(full_key_m_d,LOG_CODE_TRANSIENT_COMM,"【ERROR】监测点:%s无法将暂态时间为%lld的暂态事件写入本地缓存",start_tm,mp_id);
|
||||
DIY_ERRORLOG_CODE(full_key_m_d,LOG_CODE_TRANSIENT_COMM,"【ERROR】监测点:%s无法将暂态时间为%lld的暂态事件写入本地缓存",mp_id,start_tm);
|
||||
}
|
||||
|
||||
checkAndRemoveOldestIfNeeded(qvvrDir, 10LL * 1024 * 1024);
|
||||
}
|
||||
else{
|
||||
free(j_r);
|
||||
cJSON_Delete(j_r);
|
||||
//后续处理
|
||||
}
|
||||
}
|
||||
@@ -3623,10 +3626,11 @@ char* mp_id,char* Qvvr_rptname,char* devtype)
|
||||
// ********** 新增功能结束 **********
|
||||
|
||||
// 下面继续原逻辑,不动,处理本次发送
|
||||
if (ptr != NULL) {
|
||||
if (ptr != NULL && ptr[0] != '\0') {
|
||||
std::cout << "current qvvr handle response" << std::endl;
|
||||
handleCommentResponse(std::string(ptr));
|
||||
free(ptr);
|
||||
ptr = NULL;
|
||||
} else {
|
||||
// 处理 ptr 为 NULL 的情况,例如日志记录或错误处理
|
||||
std::cout << "Error: Received NULL response" << std::endl;
|
||||
@@ -3652,7 +3656,7 @@ char* mp_id,char* Qvvr_rptname,char* devtype)
|
||||
fileName += ".txt";
|
||||
// 把 json_string 写入文件
|
||||
if(!writeJsonToFile(fileName.c_str(), json_string)){
|
||||
DIY_ERRORLOG_CODE(full_key_m_d,LOG_CODE_TRANSIENT_COMM,"【ERROR】监测点:%s无法将暂态时间为%lld的暂态事件写入本地缓存",start_tm,mp_id);
|
||||
DIY_ERRORLOG_CODE(full_key_m_d,LOG_CODE_TRANSIENT_COMM,"【ERROR】监测点:%s无法将暂态时间为%lld的暂态事件写入本地缓存",mp_id,start_tm);
|
||||
}
|
||||
|
||||
checkAndRemoveOldestIfNeeded(qvvrDir, 10LL * 1024 * 1024);
|
||||
|
||||
Reference in New Issue
Block a user