From edd4466fdad20fcf50a7c30569ba7ce11f262914 Mon Sep 17 00:00:00 2001
From: lzz <xiguabobo_2020@qq.com>
Date: 星期四, 07 十一月 2024 12:26:09 +0800
Subject: [PATCH] Merge branch 'master' of ssh://115.28.86.8:29418/~admin/昆仑_1025
---
Server/王琨元/code/MysqlConn.h | 41
Client/龚启祥/log/日志模板_龚启祥_1106.doc | 0
Client/朱航/code/kunlunclient/logquery.h | 49
表.docx | 0
Client/申烜/log/日志_申烜_1106.doc | 0
kunlun.sql | 70
Server/王琨元/log/日志模板_王琨元_1104.doc | 0
Client/刘子航/log/日志_刘子航_1106.doc | 0
Server/王琨元/code/ConnectionPool.h | 58
Server/王琨元/code/ConnectionPool.cpp | 182 +-
Server/陈楚丹/log/日志_陈楚丹_1105.doc | 0
Client/朱航/code/kunlunclient/clientmainwindow.cpp | 52
Client/朱航/code/kunlunclient/kunlunclient.pro.user | 806 ++++++++++++++
Client/朱航/log/朱航1105.doc | 0
Client/朱航/code/kunlunclient/clientmainwindow.ui | 60 +
Client/黎弘霖/log/设备管理_黎弘霖_1106.doc | 0
Client/冀浩昶/log/日志_冀浩昶_1106.doc | 0
Server/王琨元/log/日志模板_王琨元_1106.doc | 0
Server/王琨元/log/日志模板_王琨元_1103 .doc | 0
Client/李宵增/log/历史查询_李宵增_1104.doc | 0
Server/王琨元/log/日志模板_王琨元_1101.doc | 0
Client/朱航/code/kunlunclient/main.cpp | 11
Server/马渝杭/log/日志_马渝杭_20241106.doc | 0
Client/朱航/code/kunlunclient/logquery.ui | 209 +++
Client/宋昊昳/log/日志_宋昊昳_1106.doc | 0
Client/朱航/code/kunlunclient/common.h | 1062 +++++++++++++++++++
Client/朱航/code/服务端/LogSearch.cpp | 91 +
Client/郑凯文/log/郑凯文1106.doc | 0
Client/朱航/code/服务端/LogSearch.h | 17
/dev/null | 0
Client/朱航/code/kunlunclient/kunlunclient.pro | 39
Server/王琨元/code/MysqlConn.cpp | 133 +
Client/朱航/code/kunlunclient/logquery.cpp | 216 +++
Client/李宵增/log/历史查询_李宵增_1105.doc | 0
Server/马渝杭/log/20241106昆仑日报.doc | 0
common.h | 125 +
Client/王鑫鑫/log/日志_王鑫鑫_1106.doc | 0
Server/王琨元/log/日志模板_王琨元_1105.doc | 0
Client/朱航/code/kunlunclient/clientmainwindow.h | 34
39 files changed, 2,988 insertions(+), 267 deletions(-)
diff --git "a/Client/\345\206\200\346\265\251\346\230\266/log/\346\227\245\345\277\227_\345\206\200\346\265\251\346\230\266_1106.doc" "b/Client/\345\206\200\346\265\251\346\230\266/log/\346\227\245\345\277\227_\345\206\200\346\265\251\346\230\266_1106.doc"
new file mode 100644
index 0000000..8e9710c
--- /dev/null
+++ "b/Client/\345\206\200\346\265\251\346\230\266/log/\346\227\245\345\277\227_\345\206\200\346\265\251\346\230\266_1106.doc"
Binary files differ
diff --git "a/Client/\345\210\230\345\255\220\350\210\252/log/\346\227\245\345\277\227_\345\210\230\345\255\220\350\210\252_1106.doc" "b/Client/\345\210\230\345\255\220\350\210\252/log/\346\227\245\345\277\227_\345\210\230\345\255\220\350\210\252_1106.doc"
new file mode 100644
index 0000000..3f4e716
--- /dev/null
+++ "b/Client/\345\210\230\345\255\220\350\210\252/log/\346\227\245\345\277\227_\345\210\230\345\255\220\350\210\252_1106.doc"
Binary files differ
diff --git "a/Client/\345\256\213\346\230\212\346\230\263/log/\346\227\245\345\277\227_\345\256\213\346\230\212\346\230\263_1106.doc" "b/Client/\345\256\213\346\230\212\346\230\263/log/\346\227\245\345\277\227_\345\256\213\346\230\212\346\230\263_1106.doc"
new file mode 100644
index 0000000..1f49258
--- /dev/null
+++ "b/Client/\345\256\213\346\230\212\346\230\263/log/\346\227\245\345\277\227_\345\256\213\346\230\212\346\230\263_1106.doc"
Binary files differ
diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.cpp" "b/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.cpp"
new file mode 100644
index 0000000..10656a5
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.cpp"
@@ -0,0 +1,52 @@
+锘�#include "clientmainwindow.h"
+#include "ui_clientmainwindow.h"
+#include <QDebug>
+#pragma execution_character_set("utf-8")
+
+ClientMainWindow::ClientMainWindow(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::ClientMainWindow)
+{
+ ui->setupUi(this);
+
+ m_client = new QTcpSocket(this);
+ m_client->connectToHost("127.0.0.1",16888);
+ if(m_client->waitForConnected()){
+ qDebug()<<"conn success";
+ //鍏宠仈鏀跺寘妲�
+ connect(m_client,SIGNAL(readyRead()),this,SLOT(myRead()));
+ //璋冪敤鐣岄潰鍒濆鍖�
+ initUi();
+ }else{
+ qDebug()<<"conn fail:"<<m_client->errorString();
+ }
+
+
+}
+
+ClientMainWindow::~ClientMainWindow()
+{
+ delete ui;
+}
+
+void ClientMainWindow::initUi()
+{
+ //m_logSer = new LogQuery(this);
+ m_logSer = new LogQuery(m_client,this);
+ ui->tabWidget->addTab(m_logSer,"鏃ュ織鏌ヨ");
+ connect(this,SIGNAL(queryResSignal(LogQueryRes*)),m_logSer,SLOT(queryResSlot(LogQueryRes*)));
+}
+
+void ClientMainWindow::myRead()
+{
+ QByteArray buffer = m_client->readAll();
+ qDebug()<< "buffer.size():"<<buffer.size();
+ qDebug()<< "buffer:"<<buffer;
+ int type = ((Head*)buffer.data())->type;
+ qDebug()<<"type:"<<type;
+ if(type == LOGSEARCH_RES){
+ LogQueryRes *res = (LogQueryRes*)buffer.data();
+ qDebug()<< "status:"<<res->status;
+ emit queryResSignal(res);//鍙戜俊鍙风粰鏃ュ織鏌ヨ鐣岄潰
+ }
+}
diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.h" "b/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.h"
new file mode 100644
index 0000000..e74e0a5
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.h"
@@ -0,0 +1,34 @@
+锘�#ifndef CLIENTMAINWINDOW_H
+#define CLIENTMAINWINDOW_H
+
+#include <QMainWindow>
+#include "logquery.h"
+#include "common.h"
+#include <QTcpSocket>
+#pragma execution_character_set("utf-8")
+
+namespace Ui {
+class ClientMainWindow;
+}
+
+class ClientMainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ explicit ClientMainWindow(QWidget *parent = 0);
+ ~ClientMainWindow();
+
+ void initUi();
+
+signals:
+ void queryResSignal(LogQueryRes *);//鏃ュ織鏌ヨ鍝嶅簲淇″彿
+private slots:
+ void myRead();
+private:
+ Ui::ClientMainWindow *ui;
+ LogQuery *m_logSer;
+ QTcpSocket *m_client;
+};
+
+#endif // CLIENTMAINWINDOW_H
diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.ui" "b/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.ui"
new file mode 100644
index 0000000..2c83af9
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/clientmainwindow.ui"
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ClientMainWindow</class>
+ <widget class="QMainWindow" name="ClientMainWindow">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>663</width>
+ <height>537</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>ClientMainWindow</string>
+ </property>
+ <widget class="QWidget" name="centralWidget">
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="currentIndex">
+ <number>1</number>
+ </property>
+ <widget class="QWidget" name="tab">
+ <attribute name="title">
+ <string>瀹炴椂澶у睆</string>
+ </attribute>
+ </widget>
+ <widget class="QWidget" name="tab_2">
+ <attribute name="title">
+ <string>绯荤粺璁剧疆</string>
+ </attribute>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menuBar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>663</width>
+ <height>23</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QToolBar" name="mainToolBar">
+ <attribute name="toolBarArea">
+ <enum>TopToolBarArea</enum>
+ </attribute>
+ <attribute name="toolBarBreak">
+ <bool>false</bool>
+ </attribute>
+ </widget>
+ <widget class="QStatusBar" name="statusBar"/>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources/>
+ <connections/>
+</ui>
diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/common.h" "b/Client/\346\234\261\350\210\252/code/kunlunclient/common.h"
new file mode 100644
index 0000000..13ee96b
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/common.h"
@@ -0,0 +1,1062 @@
+锘�#ifndef COMMON_H
+#define COMMON_H
+
+#include <string.h>
+
+enum TypeInfo {
+
+ //娉ㄥ唽鐧诲綍
+ LOGIN_REQ, // 鐧诲綍璇锋眰
+ LOGIN_RES, // 鐧诲綍鍝嶅簲
+ REGISTER_REQ, //娉ㄥ唽璇锋眰
+ REGISTER_RES, //娉ㄥ唽鍝嶅簲
+ RESET_REQ, //閲嶇疆瀵嗙爜璇锋眰
+ RESET_RES, //閲嶇疆瀵嗙爜鍝嶅簲
+
+
+ //鏉冮檺绠$悊
+ QUERY_PMS_REQ, // 鎸夊憳宸ョ紪鍙枫�佸悕瀛楁垨鑱屼綅鏌ヨ浜哄憳鏉冮檺淇℃伅璇锋眰
+ UPDATE_PMS_REQ, // 鎸夎鑹瞚d鏇存柊鏉冮檺淇℃伅璇锋眰
+ QUERY_PMS_RES, // 鏌ヨ浜哄憳鍜岃鑹蹭俊鎭殑鍝嶅簲缁撴瀯浣�
+ UPDATE_PMS_RES, // 鏉冮檺鏇存柊缁撴灉鍝嶅簲浣�
+
+ //璁惧绠$悊
+ AD_REQ,//娣诲姞璁惧璇锋眰
+ AD_RES,//娣诲姞璁惧鍝嶅簲
+ MD_REQ,//淇敼璁惧璇锋眰
+ MD_RES,//淇敼璁惧鍝嶅簲
+ QD_REQ,//鏌ヨ璁惧璇锋眰
+ QD_RES,//鏌ヨ璁惧鍝嶅簲
+
+ //鍦板浘鏍囨敞
+ MML_REQ,//鍦板浘鏍囨敞鍔犺浇璇锋眰
+ MML_RES,//鍦板浘鏍囨敞鍔犺浇鍝嶅簲
+ MMI_REQ,//鍦板浘鏍囨敞鎻掑叆璇锋眰
+ MMI_RES,//鍦板浘鏍囨敞鎻掑叆鍝嶅簲
+ MMD_REQ,//鍦板浘鏍囨敞鍒犻櫎璇锋眰
+ MMD_RES,//鍦板浘鏍囨敞鍒犻櫎鍝嶅簲
+
+ //澶у睆鏄剧ず
+ ENVIRONMENT_REQ,//鐜鏁版嵁璇锋眰
+ ENVIRONMENT_RES,//鐜鏁版嵁鍝嶅簲
+ DEVICESTATUS_REQ,//璁惧鐘舵�佽姹�
+ DEVICESTATUS_RES,//璁惧鐘舵�佸搷搴�
+ MOVEMENTRECORD_REQ,//鎿嶄綔鏃ュ織璇锋眰
+ MOVEMENTRECORD_RES,//鎿嶄綔鏃ュ織鍝嶅簲
+ ALARMRECORD_REQ,//璀︽姤璁板綍璇锋眰
+ ALARMRECORD_RES,//璀︽姤璁板綍鍝嶅簲
+ YIELD_REQ,//鐓ょ熆浜ч噺璇锋眰
+ YIELD_RES,//鐓ょ熆浜ч噺鍝嶅簲
+
+ //璀︽姤绠$悊
+ WARNING_REQ, // 璀︽姤璇锋眰
+ WARNING_RES, // 璀︽姤鍝嶅簲
+
+
+ //鐢熶骇璁″垝绠$悊
+ ADD_PDPLAN_REQ,//娣诲姞涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣�
+ ADD_PDPLAN_RES,//娣诲姞涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣�
+ DEL_PDPLAN_REQ,//鍒犻櫎涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣�
+ DEL_PDPLAN_RES,//鍒犻櫎涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣�
+ UPDATE_PDPLAN_REQ,//鏇存敼涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣�
+ UPDATE_PDPLAN_RES,//鏇存敼涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣�
+ QUERY_PDPLAN_REQ,//鏌ヨ涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣�
+ QUERY_PDPLAN_RES,//鏌ヨ涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣�
+
+
+ ADD_MONOUTPUT_REQ,//娣诲姞鏈堜骇閲忕殑璇锋眰缁撴瀯浣�
+ ADD_MONOUTPUT_RES,//娣诲姞鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣�
+ DEL_MONOUTPUT_REQ,//鍒犻櫎鏈堜骇閲忕殑璇锋眰缁撴瀯浣�
+ DEL_MONOUTPUT_RES,//鍒犻櫎鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣�
+ UPDATE_MONOUTPUT_REQ,//鏇存柊鏈堜骇閲忕殑璇锋眰缁撴瀯浣�
+ UPDATE_MONOUTPUT_RES,//鏇存柊鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣�
+ QUERY_MONOUTPUT_REQ,//鏌ヨ鏈堜骇閲忕殑璇锋眰缁撴瀯浣�
+ QUERY_MONOUTPUT_RES,//鏌ヨ鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣�
+
+
+ //鑷姩鍗囩骇
+ VERSION_NUM_REQ, // 鐗堟湰鍙疯姹�
+ VERSION_NUM_RES, // 鐗堟湰鍙峰搷搴�
+ UPLOAD_FILE_REQ, // 涓婁紶鏂囦欢鐨勮姹�
+ UPLOAD_FILE_RES, // 涓婁紶鏂囦欢鐨勫搷搴�
+ VERSION_INFOENTRY_REQ, // 鐗堟湰淇℃伅褰曞叆璇锋眰
+ VERSION_INFOENTRY_RES, //鐗堟湰淇℃伅褰曞叆鍝嶅簲
+ VERSION_UPDATE_REQ, // 鐗堟湰鏇存柊璇锋眰
+ VERSION_UPDATE_RES, // 鐗堟湰鏇存柊鍝嶅簲
+ FILE_DOWNLOADS_REQ, // 鐗堟湰鏇存柊鏂囦欢涓嬭浇璇锋眰
+ FILE_DOWNLOADS_RES, // 鐗堟湰鏇存柊鏂囦欢涓嬭浇鍝嶅簲
+ DOWNLOAD_SUCCESSFULLY_RES, // 鏇存柊鏂囦欢涓嬭浇鎴愬姛鐨勫搷搴�
+
+ //鏃ュ織
+ LOGSEARCH_REQ,//鏃ュ織鏌ヨ璇锋眰
+
+ LOGSEARCH_RES,//鏃ュ織鏌ヨ鍝嶅簲
+
+};
+
+struct Head {
+ int type;
+ int len;
+};
+
+//娉ㄥ唽鐧诲綍
+//鐧诲綍璇锋眰
+struct LoginReq
+{
+ Head head;
+ char userName[32];
+ char password[32];
+ LoginReq() {
+ head.type = LOGIN_REQ;
+ head.len = sizeof(LoginReq);
+ }
+};
+
+struct Permission
+{
+ int admin;//瓒呯骇绠$悊鍛�
+ int loggerSearch; //鏃ュ織鏌ヨ
+ int queryHistory; //鍘嗗彶璁板綍
+ int mapMark;//鍦板浘
+ int versionManage; // 鐗堟湰绠$悊
+ int warning; //璀︽姤
+ int devManage; //璁惧绠$悊
+ int productPlan;//鐢熶骇璁″垝
+ char roleName[32]; // 瑙掕壊鍚�
+};
+
+//鐧诲綍鍝嶅簲
+struct LoginRes
+{
+ Head head;
+ char userName[32];
+ int status; // 鐧诲綍鐘舵��
+ // 鐧诲綍鎴愬姛鏃讹紝璇ヨ处鍙峰搴旂殑鏉冮檺缁勫悎
+ Permission per;
+ LoginRes()
+ {
+ head.type = LOGIN_RES;
+ head.len = sizeof(LoginRes);
+ }
+};
+
+//娉ㄥ唽璇锋眰
+struct RegisterReq
+{
+ Head head;
+ char userName[32];
+ char password[32];
+ char email[50];
+ char capcha[10];//楠岃瘉鐮�
+ char telephone[32];
+ RegisterReq() {
+ head.type = REGISTER_REQ;
+ head.len = sizeof(RegisterReq);
+ }
+};
+
+//娉ㄥ唽鍝嶅簲
+struct RegisterRes
+{
+ Head head;
+ char userName[32];
+ int status; // 娉ㄥ唽鐘舵��
+ RegisterRes()
+ {
+ head.type = REGISTER_RES;
+ head.len = sizeof(RegisterRes);
+ }
+};
+
+//閲嶇疆瀵嗙爜璇锋眰
+struct ResetReq
+{
+ Head head;
+ char email[50];
+ char capcha[10];//楠岃瘉鐮�
+ char password[32];//鏂板瘑鐮�
+ char confirmPassword[32];//纭瀵嗙爜
+ ResetReq() {
+ head.type = RESET_REQ;
+ head.len = sizeof(ResetReq);
+ }
+};
+
+//閲嶇疆瀵嗙爜鍝嶅簲
+struct ResetRes
+{
+ Head head;
+ char user_name[32];
+ int status; // 閲嶇疆瀵嗙爜鐘舵��
+ ResetRes()
+ {
+ head.type = RESET_RES;
+ head.len = sizeof(ResetRes);
+ }
+};
+
+//鏉冮檺绠$悊
+// 鎸夊憳宸ョ紪鍙枫�佸悕瀛楁垨鑱屼綅鏌ヨ浜哄憳鏉冮檺淇℃伅璇锋眰
+ struct QueryPmsReq {
+ Head head;
+ char userNo[32];
+ char name[32];
+ char permissonType[32];
+ QueryPmsReq() {
+ head.type = QUERY_PMS_REQ;
+ memset(userNo, 0, 32);
+ memset(permissonType, 0, 32);
+ memset(name, 0, 32);
+ head.len = sizeof(QueryPmsReq);
+ }
+};
+
+// 鎸夎鑹瞚d鏇存柊鏉冮檺淇℃伅璇锋眰
+struct UpdatePmsReq {
+ Head head;
+ // 浜哄憳琛ㄤ富閿甶d
+ int id;
+ int queryHistory;
+ int loggerSearch;
+ int mapMark;
+ int devManage;
+ int productPlan;
+ int warningManage;
+ int versionManage; //鐗堟湰绠$悊
+ int admin; //绯荤粺绠$悊鍛�
+ UpdatePmsReq() {
+ head.type = QUERY_PMS_RES;
+ head.len = sizeof(UpdatePmsReq);
+ }
+} ;
+
+// 鍗曚釜浜哄憳鍜屾潈闄愯仈鍚堟煡璇㈢粨鏋勪綋
+ struct PmsRes {
+ int queryHistory;
+ int loggerSearch;
+ int mapMark;
+ int devManage;
+ int productPlan;
+ int id;
+
+ char userNo[32];
+ char name[32];
+
+ char permissonType[32]; // 瑙掕壊绫诲瀷
+ int versionManage; //鐗堟湰绠$悊
+ int admin; //绯荤粺绠$悊鍛�
+ char department[32];
+ char loginTime[32];
+ char registerTime[32];
+};
+
+// 鏌ヨ浜哄憳鍜岃鑹蹭俊鎭殑鍝嶅簲缁撴瀯浣�
+ struct QueryPmsRes {
+ Head head;
+ int success; // 1涓烘垚鍔� ,0涓哄け璐�
+ PmsRes pmsList[0];
+ QueryPmsRes() {
+ head.type = QUERY_PMS_REQ;
+ }
+};
+
+// 鏉冮檺鏇存柊缁撴灉鍝嶅簲浣�
+struct UpdatePmsRes {
+ Head head;
+ int success; // 1涓烘垚鍔� ,0涓哄け璐�
+ UpdatePmsRes() {
+ head.type = UPDATE_PMS_RES;
+ head.len = sizeof(UpdatePmsRes);
+ }
+
+};
+
+
+
+
+//璁惧绠$悊
+struct DevicesInfo
+{
+ int deviceID;
+ char deviceName[32];//璁惧鍚嶇О
+ char deviceStatus[32];//璁惧鐘舵��
+ char manufacturer[100];//鍘傚
+ char devicesType[32];//璁惧绫诲瀷
+ double longitude;//缁忓害
+ double latitude;//绾害
+ char purchasingTime[15];//璐拱鏃堕棿
+ char installTime[15];//瀹夎鏃堕棿
+ char devicesSerialNumber[32];//璁惧缂栫爜
+};
+//娣诲姞璁惧
+struct ADReq//娣诲姞璇锋眰
+{
+ Head head;
+ char deviceName[32];
+ ADReq() {
+ head.type = AD_REQ;
+ head.len = sizeof(ADReq);
+ }
+
+};
+
+struct ADRes//娣诲姞鍝嶅簲
+{
+ Head head;
+ int type;
+ ADRes() {
+ head.type = AD_RES;
+ head.len = sizeof(ADRes);
+ }
+
+};
+//淇敼璁惧
+struct MDRes//淇敼璇锋眰
+{
+ Head head;
+ DevicesInfo info;
+ MDRes() {
+ head.type = MD_RES;
+ head.len = sizeof(MDRes);
+ }
+};
+struct MDReq//淇敼鍝嶅簲
+{
+ Head head;
+ int type;
+ MDReq() {
+ head.type = MD_REQ;
+ head.len = sizeof(MDReq);
+ }
+};
+//鏌ヨ璁惧
+struct QDReq//鏌ヨ璇锋眰
+{
+ Head head;
+ DevicesInfo info;
+ QDReq() {
+ head.type = QD_REQ;
+ head.len = sizeof(QDReq);
+ }
+};
+struct QDRes//鏌ヨ鍝嶅簲
+{
+ Head head;
+ int type;
+ QDRes() {
+ head.type = QD_RES;
+ head.len = sizeof(QDRes);
+ }
+};
+
+
+//鍦板浘鏍囨敞
+struct MarkInfo
+{
+ int markId;//鏍囨敞鐐筰d
+ double latitude;//绾害
+ double longitude;//缁忓害
+ int deviceId;//璁惧ID
+ int deviceStatus;//璁惧鐘舵��
+ char deviceName[32];//璁惧鍚嶇О
+};
+//鍦板浘鏍囨敞鍔犺浇璇锋眰
+struct MMLReq//鍦板浘
+{
+ Head head;
+ MMLReq() {
+ head.type = MML_REQ;
+ head.len = sizeof(MMLReq);
+ }
+};
+//鍦板浘鏍囨敞鍔犺浇鍝嶅簲锛�
+struct MMLRes
+{
+ Head head;
+ int status;//鎿嶄綔鐘舵��
+ MarkInfo info[0];
+ MMLRes() {
+ head.type = MML_RES;
+ head.len = sizeof(MMLRes);
+ }
+};
+//鍦板浘鏍囨敞鎻掑叆璇锋眰
+struct MMIReq//鍦板浘
+{
+ Head head;
+ MarkInfo info[0];
+ MMIReq() {
+ head.type = MMI_REQ;
+ head.len = sizeof(MMIReq);
+ }
+};
+//鍦板浘鏍囨敞鎻掑叆鍝嶅簲锛�
+struct MMIRes
+{
+ Head head;
+ int status;//鎿嶄綔鐘舵��
+ MarkInfo info[0];
+ MMIRes() {
+ head.type = MMI_RES;
+ head.len = sizeof(MMIRes);
+ }
+};
+
+//鍦板浘鏍囨敞鍒犻櫎璇锋眰
+struct MMDReq//鍦板浘
+{
+ Head head;
+ MarkInfo info[0];
+ MMDReq() {
+ head.type = MMD_REQ;
+ head.len = sizeof(MMDReq);
+ }
+};
+//鍦板浘鏍囨敞鍒犻櫎鍝嶅簲锛�
+struct MMDRes
+{
+ Head head;
+ int status;//鎿嶄綔鐘舵��
+ MarkInfo info[0];
+ MMDRes() {
+ head.type = MMD_RES;
+ head.len = sizeof(MMDRes);
+ }
+};
+
+//澶у睆鏄剧ず
+//鐜鏁版嵁璇锋眰
+struct EnvironmentReq
+{
+ Head head;
+ EnvironmentReq() {
+ head.type = ENVIRONMENT_REQ;
+ head.len = sizeof(EnvironmentReq);
+ }
+};
+//鐜鏁版嵁鍝嶅簲
+struct Environment
+{
+ double longitude;//缁忓害
+ double latitude;//绾害
+ float temp;//娓╁害
+ float humidity;//婀垮害
+ float oxygen;//姘ф皵娴撳害
+ float carbon;//涓�姘у寲纰虫祿搴�
+};
+struct EnvironmentRes
+{
+ Head head;
+ int status;
+ Environment environment[0];
+ EnvironmentRes() {
+ head.type = ENVIRONMENT_RES;
+ head.len = sizeof(EnvironmentRes);
+ }
+};
+//璁惧鐘舵�佽姹�
+struct DeviceStatusReq
+{
+ Head head;
+ DeviceStatusReq() {
+ head.type = DEVICESTATUS_REQ;
+ head.len = sizeof(DeviceStatusReq);
+ }
+};
+//璁惧鐘舵�佸搷搴�
+struct DeviceStatus
+{
+ double longitude;//缁忓害
+ double latitude;//绾害
+ int deviceID;//璁惧缂栧彿
+ char deviceName[32];//璁惧鍚嶇О
+ char deviceStatus[32];//璁惧鐘舵��
+};
+struct DeviceStatusRes
+{
+ Head head;
+ int status;
+ DeviceStatus deviceStatus[0];
+ DeviceStatusRes() {
+ head.type = DEVICESTATUS_RES;
+ head.len = sizeof(DeviceStatusRes);
+ }
+};
+//鎿嶄綔鏃ュ織璇锋眰
+struct MovementRecordReq
+{
+ Head head;
+ MovementRecordReq() {
+ head.type = MOVEMENTRECORD_REQ;
+ head.len = sizeof(MovementRecordReq);
+ }
+};
+//鎿嶄綔鏃ュ織鍝嶅簲
+struct MovementRecord
+{
+ double longitude;//缁忓害
+ double latitude;//绾害
+ char userName;//鎿嶄綔鐢ㄦ埛鍚�
+ char operateTime[32];//鎿嶄綔鏃堕棿
+ char deviceName[32];//鎿嶄綔璁惧
+ char movement[256];//鎿嶄綔鎻忚堪
+};
+struct MovementRecordRes
+{
+ Head head;
+ int status;
+ MovementRecord movementRecord[0];
+ MovementRecordRes() {
+ head.type = MOVEMENTRECORD_RES;
+ head.len = sizeof(MovementRecordRes);
+ }
+};
+//璀︽姤璁板綍璇锋眰
+struct AlarmRecordReq
+{
+ Head head;
+ AlarmRecordReq() {
+ head.type = ALARMRECORD_REQ;
+ head.len = sizeof(AlarmRecordReq);
+ }
+};
+//璀︽姤璁板綍鍝嶅簲
+struct AlarmRecord
+{
+ double longitude;//缁忓害
+ double latitude;//绾害
+ char alarmTime[32];//璀︽姤鏃堕棿
+ char alarmtype[32];//澶勭悊鏃堕棿
+ char alarmContent[256];//璀︽姤鍐呭
+};
+struct AlarmRecordRes
+{
+ Head head;
+ int status;
+ AlarmRecord alarmRecord[0];
+ AlarmRecordRes() {
+ head.type = ALARMRECORD_RES;
+ head.len = sizeof(AlarmRecordRes);
+ }
+};
+//鐓ょ熆浜ч噺璇锋眰
+struct YieldReq
+{
+ Head head;
+ YieldReq() {
+ head.type = YIELD_REQ;
+ head.len = sizeof(YieldReq);
+ }
+};
+//鐓ょ熆浜ч噺鍝嶅簲
+struct Yield
+{
+ int month;//鏈堜唤
+ int output;//浜ч噺
+};
+struct YieldRes
+{
+ Head head;
+ int status;
+ Yield yield[0];
+ YieldRes() {
+ head.type = YIELD_RES;
+ head.len = sizeof(YieldRes);
+ }
+};
+
+//璀︽姤绠$悊
+// 璀︽姤璇锋眰缁撴瀯浣�
+struct WarningReq {
+ Head head;
+
+ float oxygenWarning;
+ float carbonWarning;
+ float tempWarning;
+ float humidityWarning;
+
+ WarningReq() {
+ head.type = WARNING_REQ;
+ head.len = sizeof(WarningReq);
+ }
+};
+
+
+struct DataThreshold {
+ //闃堝��
+ float oxygenThreshold;
+ float carbonThreshold;
+ float tempThreshold;
+ float humidityThreshold;
+};
+
+struct Data {
+ float oxygen; // 姘ф皵娴撳害
+ float carbon; // 涓�姘у寲纰虫祿搴�
+ float temp; // 娓╁害
+ float humidity; // 婀垮害
+};
+
+// 璀︽姤鍝嶅簲缁撴瀯浣�
+struct WarningRes {
+ Head head;
+ int status; // 鍝嶅簲鐘舵�侊紙姣斿 0 琛ㄧず鎴愬姛锛�1 琛ㄧず澶辫触绛夛級
+ const char* message; // 鍝嶅簲娑堟伅鎻忚堪
+
+ WarningRes(int stat, const char* msg) {
+ head.type = WARNING_RES;
+ head.len = sizeof(WarningRes);
+ status = stat;
+ message = msg;
+ }
+};
+
+//鐢熶骇璁″垝绠$悊
+struct PdplanInfo
+{
+ int planId;//璁㈠崟缂栧彿
+ char planName[32];//璁㈠崟鍚嶅瓧
+ char startDate[32];//璧峰鏃ユ湡
+ char closingDate[32];//浜や粯鏃ユ湡
+ char pdName[8];//浜у搧鍚�
+ double plannedPd;//璁″垝鐢熶骇閲�
+ double actualPd;//瀹為檯鐢熶骇閲�
+ double progress;//鐢熶骇杩涘害
+ int finishOntime;//鏄惁鎸夋湡瀹屾垚
+};
+
+struct MonoutputInfo
+{
+ int month;//鏈堜唤
+ double aOutput;//a浜у搧鏈堜骇閲�
+ double bOutput;//b浜у搧鏈堜骇閲�
+ double cOutput;//c浜у搧鏈堜骇閲�
+};
+
+//娣诲姞涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣�
+struct AddPdplanReq
+{
+ Head head;
+ PdplanInfo info[0];
+ AddPdplanReq() {
+ head.type = ADD_PDPLAN_REQ;
+ head.len = sizeof(AddPdplanReq);
+ }
+};
+
+//娣诲姞涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣�
+struct AddPdplanRes
+{
+ Head head;
+ int status;//琛ㄧず鏄惁娣诲姞鎴愬姛锛�0鍚�1鏄�
+ AddPdplanRes() {
+ head.type = ADD_PDPLAN_RES;
+ head.len = sizeof(AddPdplanRes);
+ }
+};
+
+//鍒犻櫎涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣�
+struct DelPdplanReq
+{
+ Head head;
+ PdplanInfo info[0];
+ DelPdplanReq() {
+ head.type = DEL_PDPLAN_REQ;
+ head.len = sizeof(DelPdplanReq);
+ }
+};
+
+//鍒犻櫎涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣�
+struct DelPdplanRes
+{
+ Head head;
+ int status;//琛ㄧず鏄惁鍒犻櫎鎴愬姛锛�0鍚�1鏄�
+ DelPdplanRes() {
+ head.type = DEL_PDPLAN_RES;
+ head.len = sizeof(DelPdplanRes);
+ }
+};
+
+//鏇存敼涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣�.
+struct UpdatePdplanReq
+{
+ Head head;
+ PdplanInfo info[0];
+ UpdatePdplanReq() {
+ head.type = UPDATE_PDPLAN_REQ;
+ head.len = sizeof(UpdatePdplanReq);
+ }
+};
+
+//鏇存敼涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣�
+struct UpdatePdplanRes
+{
+ Head head;
+ int status;//琛ㄧず鏄惁鏇存柊鎴愬姛锛�0鍚�1鏄�
+ PdplanInfo info[0];
+ UpdatePdplanRes() {
+ head.type = UPDATE_PDPLAN_RES;
+ head.len = sizeof(UpdatePdplanRes);
+ }
+};
+
+//鏌ヨ涓�鏉$敓浜ц鍒掔殑璇锋眰缁撴瀯浣�
+struct QueryPdplanReq
+{
+ Head head;
+ int planId;//璁㈠崟缂栧彿
+ char planName[32];//璁㈠崟鍒掑悕瀛�
+ char startDate[32];//璧峰鏃ユ湡
+ char closingDate[32];//浜や粯鏃ユ湡
+ char pdName[8];//浜у搧鍚�
+ double plannedPd;//璁″垝鐢熶骇閲�
+ double actualPd;//瀹為檯鐢熶骇閲�
+ double progress;//鐢熶骇杩涘害
+ int finishOntime;//鏄惁鎸夋湡瀹屾垚
+ QueryPdplanReq() {
+ head.type = QUERY_PDPLAN_REQ;
+ head.len = sizeof(QueryPdplanReq);
+ }
+};
+
+//鏌ヨ涓�鏉$敓浜ц鍒掔殑鍝嶅簲缁撴瀯浣�
+struct QueryPdplanRes
+{
+ Head head;
+ int status;//琛ㄧず鏄惁娣诲姞鎴愬姛锛�0鍚�1鏄�
+ PdplanInfo info[0];
+ QueryPdplanRes() {
+ head.type = QUERY_PDPLAN_RES;
+ head.len = sizeof(QueryPdplanRes);
+ }
+};
+
+
+//娣诲姞鏈堜骇閲忕殑璇锋眰缁撴瀯浣�
+struct AddMonoutputReq
+{
+ Head head;
+ MonoutputInfo info[0];
+ AddMonoutputReq() {
+ head.type = ADD_MONOUTPUT_REQ;
+ head.len = sizeof(AddMonoutputReq);
+ }
+};
+
+//娣诲姞鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣�
+struct AddMonoutputRes
+{
+ Head head;
+ int status;//琛ㄧず鏄惁娣诲姞鎴愬姛锛�0鍚�1鏄�
+ AddMonoutputRes() {
+ head.type = ADD_MONOUTPUT_RES;
+ head.len = sizeof(AddMonoutputRes);
+ }
+};
+
+//鍒犻櫎鏈堜骇閲忕殑璇锋眰缁撴瀯浣�
+struct DelMonoutputReq
+{
+ Head head;
+ MonoutputInfo info[0];
+ DelMonoutputReq() {
+ head.type = DEL_MONOUTPUT_REQ;
+ head.len = sizeof(DelMonoutputReq);
+ }
+};
+
+//鍒犻櫎鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣�
+struct DelMonoutputRes
+{
+ Head head;
+ int status;//琛ㄧず鏄惁鍒犻櫎鎴愬姛锛�0鍚�1鏄�
+ DelMonoutputRes() {
+ head.type = DEL_MONOUTPUT_RES;
+ head.len = sizeof(DelMonoutputRes);
+ }
+};
+
+//鏇存敼鏈堜骇閲忕殑璇锋眰缁撴瀯浣�.
+struct UpdateMonoutputReq
+{
+ Head head;
+ MonoutputInfo info[0];
+ UpdateMonoutputReq() {
+ head.type = UPDATE_MONOUTPUT_REQ;
+ head.len = sizeof(UpdateMonoutputReq);
+ }
+};
+
+//鏇存敼鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣�
+struct UpdateMonoutputRes
+{
+ Head head;
+ int status;//琛ㄧず鏄惁鏇存柊鎴愬姛锛�0鍚�1鏄�
+ MonoutputInfo info[0];
+ UpdateMonoutputRes() {
+ head.type = UPDATE_MONOUTPUT_RES;
+ head.len = sizeof(UpdateMonoutputRes);
+ }
+};
+
+//鏌ヨ鏈堜骇閲忕殑璇锋眰缁撴瀯浣�
+struct QueryMonoutputReq
+{
+ Head head;
+ int month;//鏈堜唤
+ double aOutput;//a浜у搧鏈堜骇閲�
+ double bOutput;//b浜у搧鏈堜骇閲�
+ double cOutput;//c浜у搧鏈堜骇閲�
+ QueryMonoutputReq() {
+ head.type = QUERY_MONOUTPUT_REQ;
+ head.len = sizeof(QueryMonoutputReq);
+ }
+};
+
+//鏌ヨ鏈堜骇閲忕殑鍝嶅簲缁撴瀯浣�
+struct QueryMonoutputRes
+{
+ Head head;
+ int status;//琛ㄧず鏄惁娣诲姞鎴愬姛锛�0鍚�1鏄�
+ MonoutputInfo info[0];
+ QueryMonoutputRes() {
+ head.type = QUERY_MONOUTPUT_RES;
+ head.len = sizeof(QueryMonoutputRes);
+ }
+};
+
+
+
+//鍘嗗彶鏌ヨ鍒嗘瀽
+// 鍘嗗彶鏌ヨ璇锋眰缁撴瀯浣�
+struct HistoryQueryReq {
+ Head head;
+ //鏍规嵁鏃堕棿鑼冨洿鏌ヨ
+ char startTime[32];
+ char endTime[32];
+ //鍏抽敭瀛楁煡璇�
+ char keyWord[32];
+ HistoryQueryReq() {
+ // 鍒濆鍖栨暟鎹ご
+ head.type = QUERY_MONOUTPUT_REQ;
+ head.len = sizeof(HistoryQueryReq);
+ // 鍒濆鍖栨煡璇㈡潯浠跺瓧娈�
+ memset(startTime, 0, sizeof(startTime));
+ memset(endTime, 0, sizeof(endTime));
+
+ }
+};
+
+// 鍘嗗彶鏌ヨ鍝嶅簲缁撴瀯浣�
+
+// 绯荤粺杩愯鐘舵�佽〃鐩稿叧淇℃伅
+struct HistroyInfo {
+ WarningRes warn;//璀︽姤鏌ヨ
+ QDRes dev;//璁惧鏌ヨ
+ QueryPdplanRes pro;//鐢熶骇璁″垝鏌ヨ
+};
+struct HistoryQueryRes {
+ Head head;
+ HistroyInfo sys[0];
+ HistoryQueryRes() {
+ // 鍒濆鍖栨暟鎹ご
+ head.type = QUERY_MONOUTPUT_RES;
+ head.len = sizeof(HistoryQueryRes);
+ }
+};
+
+
+//鑷姩鍗囩骇
+struct VersionNumReq // 鐗堟湰鍙疯姹�
+{
+ Head head;
+ VersionNumReq() {
+ head.type = VERSION_NUM_REQ;
+ head.len = sizeof(VersionNumReq);
+ }
+};
+
+struct VersionNumRes // 鐗堟湰鍙峰搷搴�
+{
+ Head head;
+ char versionId[64]; // 鐗堟湰鍙�
+ VersionNumRes() {
+ head.type = VERSION_NUM_RES;
+ head.len = sizeof(VersionNumRes);
+ }
+};
+
+// 鏂囦欢浼犺緭
+struct FileInfo
+{
+ char fileName[256];
+ long long fileSize;
+ char s_filepath[128];
+ char content[0];
+};
+
+struct UploadFileReq // 涓婁紶鏂囦欢鐨勮姹�
+{
+ Head head;
+ FileInfo fileInfo;
+ UploadFileReq() {
+ head.type = UPLOAD_FILE_REQ;
+ head.len = sizeof(UploadFileReq);
+ }
+};
+
+struct UploadFileRes { // 涓婁紶鏂囦欢鐨勫搷搴�
+ Head head;
+ bool state = false;
+ char fileName[256];
+ long long file_size;
+ UploadFileRes()
+ {
+ head.type = UPLOAD_FILE_RES;
+ head.len = sizeof(UploadFileRes);
+ }
+};
+
+// 鐗堟湰淇℃伅褰曞叆
+// 璇锋眰
+struct VersionInfoEntryReq {
+ Head head;
+ char versionId[64]; // 鐗堟湰鍙�
+ char versionIdOld[64]; // 涓婁竴涓増鏈彿
+ int fileNum;
+ char context[0]; //鍖呭惈涓嬭浇鏂囦欢淇℃伅
+
+ VersionInfoEntryReq()
+ {
+ head.type = VERSION_INFOENTRY_REQ;
+ head.len = sizeof(VersionInfoEntryReq);
+ }
+};
+
+// 鐗堟湰淇℃伅褰曞叆鍝嶅簲
+struct VersionInfoEntryRes {
+ Head head;
+ bool state = false;
+ VersionInfoEntryRes()
+ {
+ head.type = VERSION_INFOENTRY_RES;
+ head.len = sizeof(VersionInfoEntryRes);
+ }
+};
+
+// 鐗堟湰鏇存柊璇锋眰
+struct VersionUpdateReq {
+ Head head;
+
+ char curVersionId[64]; // 鐗堟湰鍙�
+ VersionUpdateReq()
+ {
+ head.type = VERSION_UPDATE_REQ;
+ head.len = sizeof(VersionUpdateReq);
+ }
+};
+
+// 鐗堟湰鏇存柊鍝嶅簲
+struct VersionUpdateRes {
+ Head head;
+ bool state = false;
+ char versionId[64]; // 鐗堟湰鍙�
+ char updateDate[32]; // 鏇存柊鏃堕棿
+ char versionDescription[1024]; //鏇存柊鎻忚堪
+
+ VersionUpdateRes()
+ {
+ head.type = VERSION_UPDATE_RES;
+ head.len = sizeof(VersionUpdateRes);
+ }
+};
+
+// 鐗堟湰鏇存柊鏂囦欢涓嬭浇璇锋眰
+struct FileDownloadsReq {
+ Head head;
+ char versionId[64]; // 鐗堟湰鍙�
+ FileDownloadsReq()
+ {
+ head.type = FILE_DOWNLOADS_REQ;
+ head.len = sizeof(FileDownloadsReq);
+ }
+};
+
+// 鐗堟湰鏇存柊鏂囦欢涓嬭浇鍝嶅簲
+struct FileDownloadsRes {
+ Head head;
+ char versionId[64]; // 鐗堟湰鍙�
+ char filename[128]; //鏂囦欢鍚�
+ long long filesize; //鏂囦欢澶у皬
+ char c_filepath[128]; //瀹㈡埛绔斁鏈�鏂扮増鏈殑鏈湴璺緞
+ int fileNum; // 鏂囦欢鏁伴噺
+ long long allFileSize; // 鏂囦欢鎬诲ぇ灏�
+ char content[0];
+ FileDownloadsRes()
+ {
+ head.type = FILE_DOWNLOADS_RES;
+ head.len = sizeof(FileDownloadsRes);
+ }
+};
+
+// 鏇存柊鏂囦欢涓嬭浇鎴愬姛鐨勫搷搴�
+struct DownloadSuccessfullyRes {
+ Head head;
+ bool state = false;
+ char fileName[256];
+ long long fileSize;
+ DownloadSuccessfullyRes()
+ {
+ head.type = DOWNLOAD_SUCCESSFULLY_RES;
+ head.len = sizeof(DownloadSuccessfullyRes);
+ }
+};
+
+
+//鏃ュ織
+struct ParsedLog {
+ int id;
+ char timeStamp[64]; // 鏃堕棿鎴�
+ char deviceId[64]; // 璁惧ID
+ char level[16]; // 鏃ュ織绾у埆
+ char content[256]; // 鏃ュ織鍐呭
+ char userId[64]; // 鐢ㄦ埛ID
+ char fileName[32]; //鏂囦欢鍚�
+ int problemLine; //浜х敓閿欒琛屽彿
+ char functionName[32]; //鍑芥暟鍚�
+
+};
+
+// 鏃ュ織鏌ヨ璇锋眰缁撴瀯浣�
+struct LogQueryReq {
+ Head head; // 鏁版嵁澶�
+ char startTime[20]; // 鏍规嵁瀹為檯闇�瑕佽皟鏁村ぇ灏�
+ char endTime[20]; // 鏍规嵁瀹為檯闇�瑕佽皟鏁村ぇ灏�
+ char content[256]; // 鏃ュ織鍐呭
+ char level[16]; //鏃ュ織绾у埆
+ char deviceId[64]; // 璁惧ID
+ // 鏃犲弬鏋勯�犲嚱鏁�
+ LogQueryReq() {
+ head.type = LOGSEARCH_REQ;
+ head.len = sizeof(LogQueryReq);
+ }
+};
+
+
+// 鏃ュ織鏌ヨ鍝嶅簲缁撴瀯浣�
+struct LogQueryRes {
+ Head head;
+ int status; // 鍝嶅簲鐘舵�� (濡� 0 琛ㄧず鎴愬姛锛岄潪 0 琛ㄧず澶辫触)
+ ParsedLog parsedLog[0]; // 浣跨敤鏌旀�ф暟缁勫瓨鍌ㄦ煡璇㈢粨鏋�
+
+ // 鏃犲弬鏋勯�犲嚱鏁�
+ LogQueryRes() {
+ head.type = LOGSEARCH_RES;
+ head.len = sizeof(LogQueryRes);
+ }
+};
+
+
+
+
+#endif // COMMON_H
diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/kunlunclient.pro" "b/Client/\346\234\261\350\210\252/code/kunlunclient/kunlunclient.pro"
new file mode 100644
index 0000000..f335c61
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/kunlunclient.pro"
@@ -0,0 +1,39 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2024-11-04T19:54:13
+#
+#-------------------------------------------------
+
+QT += core gui network
+
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = kunlunclient
+TEMPLATE = app
+
+# The following define makes your compiler emit warnings if you use
+# any feature of Qt which has been marked as deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if you use deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
+
+
+SOURCES += \
+ main.cpp \
+ clientmainwindow.cpp \
+ logquery.cpp
+
+HEADERS += \
+ clientmainwindow.h \
+ logquery.h \
+ common.h
+
+FORMS += \
+ clientmainwindow.ui \
+ logquery.ui
diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/kunlunclient.pro.user" "b/Client/\346\234\261\350\210\252/code/kunlunclient/kunlunclient.pro.user"
new file mode 100644
index 0000000..0cd92fe
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/kunlunclient.pro.user"
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QtCreatorProject>
+<!-- Written by QtCreator 4.5.0, 2024-11-06T21:44:24. -->
+<qtcreator>
+ <data>
+ <variable>EnvironmentId</variable>
+ <value type="QByteArray">{197a2871-47a7-48be-824d-e8eb4f5b395c}</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.ActiveTarget</variable>
+ <value type="int">0</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.EditorSettings</variable>
+ <valuemap type="QVariantMap">
+ <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
+ <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
+ <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
+ <value type="QString" key="language">Cpp</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
+ </valuemap>
+ </valuemap>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
+ <value type="QString" key="language">QmlJS</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
+ </valuemap>
+ </valuemap>
+ <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
+ <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
+ <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
+ <value type="int" key="EditorConfiguration.IndentSize">4</value>
+ <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
+ <value type="int" key="EditorConfiguration.MarginColumn">80</value>
+ <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
+ <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
+ <value type="int" key="EditorConfiguration.PaddingMode">1</value>
+ <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
+ <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
+ <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
+ <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
+ <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
+ <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
+ <value type="int" key="EditorConfiguration.TabSize">8</value>
+ <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+ <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
+ <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
+ <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
+ <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+ <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.PluginSettings</variable>
+ <valuemap type="QVariantMap"/>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Target.0</variable>
+ <valuemap type="QVariantMap">
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.9.4 MinGW 32bit</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.9.4 MinGW 32bit</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.594.win32_mingw53_kit</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MinGW_32bit-Debug</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MinGW_32bit-Release</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MinGW_32bit-Profile</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">閮ㄧ讲</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鍦ㄦ湰鍦伴儴缃�</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+ <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+ <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+ <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+ <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+ <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+ <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+ <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+ <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+ <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+ <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+ <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+ <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+ <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+ <value type="int">0</value>
+ <value type="int">1</value>
+ <value type="int">2</value>
+ <value type="int">3</value>
+ <value type="int">4</value>
+ <value type="int">5</value>
+ <value type="int">6</value>
+ <value type="int">7</value>
+ <value type="int">8</value>
+ <value type="int">9</value>
+ <value type="int">10</value>
+ <value type="int">11</value>
+ <value type="int">12</value>
+ <value type="int">13</value>
+ <value type="int">14</value>
+ </valuelist>
+ <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+ <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">kunlunclient</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:B:/Qt/QtProject/kunlunclient/kunlunclient.pro</value>
+ <value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value>
+ <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">kunlunclient.pro</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
+ <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
+ <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MinGW_32bit-Debug</value>
+ <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+ <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+ <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Target.1</variable>
+ <valuemap type="QVariantMap">
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.9.4 MSVC2015 32bit</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.9.4 MSVC2015 32bit</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.594.win32_msvc2015_kit</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MSVC2015_32bit-Debug</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MSVC2015_32bit-Release</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MSVC2015_32bit-Profile</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">閮ㄧ讲</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鍦ㄦ湰鍦伴儴缃�</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+ <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+ <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+ <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+ <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+ <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+ <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+ <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+ <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+ <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+ <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+ <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+ <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+ <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+ <value type="int">0</value>
+ <value type="int">1</value>
+ <value type="int">2</value>
+ <value type="int">3</value>
+ <value type="int">4</value>
+ <value type="int">5</value>
+ <value type="int">6</value>
+ <value type="int">7</value>
+ <value type="int">8</value>
+ <value type="int">9</value>
+ <value type="int">10</value>
+ <value type="int">11</value>
+ <value type="int">12</value>
+ <value type="int">13</value>
+ <value type="int">14</value>
+ </valuelist>
+ <value type="int" key="PE.EnvironmentAspect.Base">-1</value>
+ <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Executable</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
+ <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+ <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+ <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Target.2</variable>
+ <valuemap type="QVariantMap">
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.9.4 MSVC2015 64bit</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.9.4 MSVC2015 64bit</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.594.win64_msvc2015_64_kit</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MSVC2015_64bit-Debug</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MSVC2015_64bit-Release</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">B:/Qt/QtProject/build-kunlunclient-Desktop_Qt_5_9_4_MSVC2015_64bit-Profile</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">閮ㄧ讲</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鍦ㄦ湰鍦伴儴缃�</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+ <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+ <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+ <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+ <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+ <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+ <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+ <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+ <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+ <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+ <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+ <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+ <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+ <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+ <value type="int">0</value>
+ <value type="int">1</value>
+ <value type="int">2</value>
+ <value type="int">3</value>
+ <value type="int">4</value>
+ <value type="int">5</value>
+ <value type="int">6</value>
+ <value type="int">7</value>
+ <value type="int">8</value>
+ <value type="int">9</value>
+ <value type="int">10</value>
+ <value type="int">11</value>
+ <value type="int">12</value>
+ <value type="int">13</value>
+ <value type="int">14</value>
+ </valuelist>
+ <value type="int" key="PE.EnvironmentAspect.Base">-1</value>
+ <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Executable</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
+ <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+ <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+ <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.TargetCount</variable>
+ <value type="int">3</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+ <value type="int">18</value>
+ </data>
+ <data>
+ <variable>Version</variable>
+ <value type="int">18</value>
+ </data>
+</qtcreator>
diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.cpp" "b/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.cpp"
new file mode 100644
index 0000000..cfc075c
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.cpp"
@@ -0,0 +1,216 @@
+锘�#include "logquery.h"
+#include "ui_logquery.h"
+#include <QTcpSocket>
+#include <QMessageBox>
+#include <QStandardItemModel>
+#pragma execution_character_set("utf-8")
+
+
+
+LogQuery::LogQuery(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::LogQuery)
+{
+ ui->setupUi(this);
+
+ m_client = nullptr;//缃┖
+
+}
+
+LogQuery::LogQuery(QTcpSocket *client, QWidget *parent):
+ QMainWindow(parent),
+ ui(new Ui::LogQuery)
+{
+ ui->setupUi(this);
+
+ connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(onComboBoxIndexChanged(int)));
+ ui->dateTimeEdit_end->setDateTime(QDateTime::currentDateTime());
+ //鎷変几 鏁堟灉
+ ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
+ ui->spinBox->setValue(10);
+
+// int nWidth = ui->tableView->width();
+// ui->tableView->setColumnWidth(0, qRound(nWidth*0.1));
+// ui->tableView->setColumnWidth(1, qRound(nWidth*0.5));
+// ui->tableView->setColumnWidth(2, qRound(nWidth*0.3));
+// ui->tableView->setColumnWidth(3, qRound(nWidth*0.15));
+// ui->tableView->setColumnWidth(4, qRound(nWidth*0.15));
+// ui->tableView->setColumnWidth(5, qRound(nWidth*0.3));
+// ui->tableView->setColumnWidth(6, qRound(nWidth*0.3));
+// ui->tableView->setColumnWidth(7, qRound(nWidth*0.3));
+// ui->tableView->setColumnWidth(8, qRound(nWidth*0.3));
+
+
+
+ m_client = client;//鍏变韩濂楁帴瀛�
+}
+
+LogQuery::~LogQuery()
+{
+ delete ui;
+}
+
+void LogQuery::on_pushButton_search_clicked()
+{
+ QString selectedFilter = ui->comboBox->currentText();
+ QByteArray request;
+
+ // 鍔ㄦ�佸垎閰嶈姹傜粨鏋勪綋
+ int size = sizeof(LogQueryReq) + sizeof(ParsedLog);
+ LogQueryReq* req = (LogQueryReq*)new char[size];
+
+ req->head.type = LOGSEARCH_REQ;
+ req->head.len = size;
+
+ // 鍒濆鍖栬姹傛暟鎹�
+ initializeRequestData(req);
+
+ // 鏍规嵁閫夊畾鐨勭瓫閫夋潯浠跺~鍏呰姹傛暟鎹�
+ if (selectedFilter == "鏃堕棿") {
+
+ QString startTime = ui->dateTimeEdit_start->dateTime().toString("yyyy-MM-dd HH:mm:ss");
+ QString endTime = ui->dateTimeEdit_end->dateTime().toString("yyyy-MM-dd HH:mm:ss");
+
+ // 灏嗗紑濮嬫椂闂村拰缁撴潫鏃堕棿璁剧疆鍒拌姹備腑
+ strcpy(req->startTime, startTime.toLocal8Bit().constData());
+ strcpy(req->endTime, endTime.toLocal8Bit().constData());
+ } else if (selectedFilter == "鏃ュ織鍐呭" || selectedFilter == "鏃ュ織绾у埆" || selectedFilter == "璁惧ID") {
+ QString filterValue = ui->lineEdit->text();
+ if (filterValue.isEmpty()) {
+ QMessageBox::warning(this, "璀﹀憡", "璇疯緭鍏ョ瓫閫夋潯浠讹紒");
+ delete[] req; // 閲婃斁鍐呭瓨
+ return;
+ }
+
+ // 鏍规嵁绛涢�夋潯浠跺~鍏呯浉搴旂殑瀛楁
+ if (selectedFilter == "鏃ュ織鍐呭") {
+
+ strcpy(req->content, filterValue.toLocal8Bit().data());
+ } else if (selectedFilter == "鏃ュ織绾у埆") {
+
+ strcpy(req->level, filterValue.toLocal8Bit().data());
+ } else if (selectedFilter == "璁惧ID") {
+
+ strcpy(req->deviceId, filterValue.toLocal8Bit().data());
+ }
+ } else {
+ QMessageBox::warning(this, "璀﹀憡", "璇烽�夋嫨鏈夋晥鐨勭瓫閫夋潯浠讹紒");
+ delete[] req; // 閲婃斁鍐呭瓨
+ return;
+ }
+
+ // 灏嗙粨鏋勪綋杞负 QByteArray
+ request = QByteArray((char*)(req), req->head.len);
+
+ // 鍙戦�佽姹�
+ if (m_client != nullptr) {
+ qDebug() << __FUNCTION__ << m_client->write(request);
+ }
+
+ // 閲婃斁鍐呭瓨
+ delete[] req;
+ currentPage = 1;
+ // 閲嶆柊璁$畻鎬婚〉鏁�
+ totalPages = (logs.size() + logsPerPage - 1) / logsPerPage;
+ displayCurrentPage();
+ updatePageLabel();
+
+}
+
+void LogQuery::queryResSlot(LogQueryRes *res)
+{
+ if (res->status == 1) {
+ // 瑙f瀽鏃ュ織鏁版嵁
+ logs.clear();
+
+ int maxLogs = ui->spinBox->value();
+ int logCount = (res->head.len - sizeof(LogQueryRes)) / sizeof(ParsedLog);
+ qDebug()<<"logcount = "<<logCount;
+ int displayCount = qMin(maxLogs, logCount); // 鏄剧ず鏁伴噺涓嶈秴杩囨渶澶у��
+ for (int i = 0; i < displayCount; ++i) {
+ logs.append(res->parsedLog[i]);
+ }
+
+ totalPages = (logs.size()+logsPerPage -1)/ logsPerPage;//璁$畻鎬婚〉鏁�
+ currentPage = 1; // 閲嶇疆椤电爜
+ updatePageLabel();//鏇存柊鏍囩
+ displayCurrentPage(); // 鏄剧ず绗竴椤�
+ }
+ else{
+ ui->tableView->setModel(nullptr);
+ QMessageBox::warning(this, "璀﹀憡", "鏃犵浉鍏冲唴瀹�");
+
+ }
+}
+
+void LogQuery::initializeRequestData(LogQueryReq *req)
+{
+ req->startTime[0] = '\0';
+ req->endTime[0] = '\0';
+ req->level[0] = '\0';
+ req->deviceId[0] = '\0';
+ req->content[0] = '\0';
+}
+
+void LogQuery::updatePageLabel()
+{
+ ui->label_currentPage->setText(QString("褰撳墠椤碉細%1 / %2").arg(currentPage).arg(totalPages));
+ // 濡傛灉鍙湁涓�椤垫垨鑰呮病鏈夋暟鎹紝绂佺敤涓婁笅椤垫寜閽�
+ ui->pushButton_up->setEnabled(currentPage > 1); // 绂佺敤涓婁竴椤垫寜閽�
+ ui->pushButton_down->setEnabled(currentPage < totalPages); // 绂佺敤涓嬩竴椤垫寜閽�
+}
+
+
+void LogQuery::on_pushButton_up_clicked()
+{
+ if (currentPage > 0) {
+ --currentPage;
+ updatePageLabel();
+ displayCurrentPage(); // 鏄剧ず涓婁竴椤�
+ }
+}
+
+void LogQuery::on_pushButton_down_clicked()
+{
+ if (currentPage < totalPages) {
+ ++currentPage;
+ updatePageLabel();
+ displayCurrentPage();
+ }
+}
+
+void LogQuery::onComboBoxIndexChanged(int index)
+{
+ ui->lineEdit->clear();
+}
+
+void LogQuery::displayCurrentPage()
+{
+ QStandardItemModel* model = new QStandardItemModel();
+ model->setHorizontalHeaderLabels({"ID", "鏃堕棿", "璁惧ID", "鏃ュ織绾у埆", "鏃ュ織鍐呭", "鐢ㄦ埛ID", "閿欒鏂囦欢鍚�", "閿欒琛屽彿", "閿欒鍑芥暟鍚�"});
+
+ int start = (currentPage -1)* logsPerPage;
+ int end = qMin(start + logsPerPage, logs.size());
+
+ // 濉厖褰撳墠椤电殑鏃ュ織鏉$洰
+ for (int i = start; i < end; ++i) {
+ ParsedLog parsedLog = logs[i];
+ QList<QStandardItem *> rowItems;
+
+ rowItems.append(new QStandardItem(QString::number(parsedLog.id)));
+ rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.timeStamp)));
+ rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.deviceId)));
+ rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.level)));
+ rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.content)));
+ rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.userId)));
+ rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.fileName)));
+ rowItems.append(new QStandardItem(QString::number(parsedLog.problemLine)));
+ rowItems.append(new QStandardItem(QString::fromLocal8Bit(parsedLog.functionName)));
+
+ model->appendRow(rowItems);
+ }
+
+ // 鏇存柊琛ㄦ牸瑙嗗浘
+ ui->tableView->setModel(model);
+ ui->tableView->resizeColumnsToContents();
+}
diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.h" "b/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.h"
new file mode 100644
index 0000000..4fe6a49
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.h"
@@ -0,0 +1,49 @@
+锘�#ifndef LOGQUERY_H
+#define LOGQUERY_H
+
+#include <QMainWindow>
+#include "common.h"
+#include <QTcpSocket>
+#pragma execution_character_set("utf-8")
+
+
+namespace Ui {
+class LogQuery;
+}
+
+class LogQuery : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ explicit LogQuery(QWidget *parent = 0);
+ explicit LogQuery(QTcpSocket *client,QWidget *parent = 0);
+ ~LogQuery();
+
+private slots:
+ void on_pushButton_search_clicked();
+
+ void queryResSlot(LogQueryRes *res);
+
+ void on_pushButton_up_clicked();
+
+ void on_pushButton_down_clicked();
+
+ void onComboBoxIndexChanged(int index);
+
+private:
+ void displayCurrentPage();
+ Ui::LogQuery *ui;
+ QTcpSocket *m_client;
+
+ QVector<ParsedLog> logs;
+
+ int currentPage = 1; // 褰撳墠椤电爜锛屼粠1寮�濮�
+ int totalPages = 1; // 鎬婚〉鏁�
+ const int logsPerPage = 10; // 姣忛〉鏄剧ず鐨勬棩蹇楁暟閲�
+
+ void initializeRequestData(LogQueryReq* req);//鍒濆鍖栬姹傛暟鎹�
+ void updatePageLabel();
+};
+
+#endif // LOGQUERY_H
diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.ui" "b/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.ui"
new file mode 100644
index 0000000..4bfb989
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/logquery.ui"
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>LogQuery</class>
+ <widget class="QMainWindow" name="LogQuery">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>MainWindow</string>
+ </property>
+ <widget class="QWidget" name="centralwidget">
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>鏌ヨ鏉′欢</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QComboBox" name="comboBox">
+ <item>
+ <property name="text">
+ <string>鏃堕棿</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>鏃ュ織鍐呭</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>鏃ュ織绾у埆</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>璁惧ID</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="lineEdit"/>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>寮�濮嬶細</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDateTimeEdit" name="dateTimeEdit_start">
+ <property name="calendarPopup">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>缁撴潫锛�</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDateTimeEdit" name="dateTimeEdit_end">
+ <property name="calendarPopup">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QPushButton" name="pushButton_search">
+ <property name="text">
+ <string>鏌ヨ</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox"/>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>鏌ヨ缁撴灉</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QTableView" name="tableView"/>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_5">
+ <item>
+ <widget class="QLabel" name="label_currentPage">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButton_up">
+ <property name="text">
+ <string>涓婁竴椤�</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButton_down">
+ <property name="text">
+ <string>涓嬩竴椤�</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menubar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>23</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git "a/Client/\346\234\261\350\210\252/code/kunlunclient/main.cpp" "b/Client/\346\234\261\350\210\252/code/kunlunclient/main.cpp"
new file mode 100644
index 0000000..10f11bd
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/code/kunlunclient/main.cpp"
@@ -0,0 +1,11 @@
+#include "clientmainwindow.h"
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ ClientMainWindow w;
+ w.show();
+
+ return a.exec();
+}
diff --git "a/Client/\346\234\261\350\210\252/code/\346\234\215\345\212\241\347\253\257/LogSearch.cpp" "b/Client/\346\234\261\350\210\252/code/\346\234\215\345\212\241\347\253\257/LogSearch.cpp"
new file mode 100644
index 0000000..686d211
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/code/\346\234\215\345\212\241\347\253\257/LogSearch.cpp"
@@ -0,0 +1,91 @@
+#include "stdafx.h"
+#include "LogSearch.h"
+#include <iostream>
+#include "MysqlConn.h"
+using namespace std;
+LogSearch::LogSearch()
+{
+}
+
+
+LogSearch::~LogSearch()
+{
+}
+
+bool LogSearch::searchLogBusiness(SOCKET client, LogQueryReq * req)
+{
+ //// 初始化 SQL 查询语句
+
+ string sql = "SELECT * FROM parsed_logs WHERE";
+
+ if (*(req->startTime) && *(req->endTime)) {
+ sql += " time_stamp BETWEEN '" + string(req->startTime) + "' AND '" + string(req->endTime) + "'";
+ }
+
+ if (*(req->level)) {
+ sql += " level LIKE '%" + string(req->level) + "%'";
+ }
+
+ if (*(req->deviceId)) {
+ sql += " device_id LIKE '%" + string(req->deviceId) + "%'";
+ }
+
+ if ((*req->content)) {
+ sql += " content LIKE '%" + string(req->content) + "%'";
+ }
+
+ // 打印构建的 SQL 语句,方便调试
+ cout << "SQL: " << sql << endl;
+
+ // 设置 MySQL 连接并执行查询
+
+
+ MysqlConn conn;
+ vector<vector<string>> result;
+ bool querySuccess = conn.query(sql, result);
+ if (!querySuccess) {
+ cout << "查询失败" << endl;
+ return false;
+ }
+
+ int len = sizeof(LogQueryRes) + result.size() * sizeof(ParsedLog); // 动态计算数据长度
+ LogQueryRes* res = (LogQueryRes*)malloc(len); // 为 LogQueryRes 结构体及其柔性数组分配内存
+
+ // 初始化结构体
+ res->head.type = LOGSEARCH_RES;
+ res->head.len = len;
+ res->status = (result.empty()) ? 0 : 1; // 如果结果为空,设置状态为 0
+
+ // 将查询结果填充到 parsedLog 数组中
+ for (const auto& row : result) {
+ cout << "行:" << row.size() << endl;
+ for (const auto& item : row) {
+ cout << item << " ";
+
+ }
+ }
+ cout << endl;
+ for (size_t i = 0; i < result.size(); ++i) {
+ const auto& row = result[i];
+ ParsedLog parlog;
+ if (row.size() >= 9) {
+ parlog.id = stoi(row[0]);
+ strncpy(parlog.timeStamp, row[1].c_str(), sizeof(parlog.timeStamp));
+ strncpy(parlog.deviceId, row[2].c_str(), sizeof(parlog.deviceId));
+ strncpy(parlog.level, row[3].c_str(), sizeof(parlog.level));
+ strncpy(parlog.content, row[4].c_str(), sizeof(parlog.content));
+ strncpy(parlog.userId, row[5].c_str(), sizeof(parlog.userId));
+ strncpy(parlog.fileName, row[6].c_str(), sizeof(parlog.fileName));
+ parlog.problemLine = stoi(row[7]);
+ strncpy(parlog.functionName, row[8].c_str(), sizeof(parlog.functionName));
+ res->parsedLog[i] = parlog; // 填充数据
+ }
+ }
+
+ // 发送响应
+ cout << __FUNCTION__ << send(client, (char*)res, res->head.len, 0) << endl;
+
+ // 释放内存
+ free(res); // 释放分配的内存
+
+}
diff --git "a/Client/\346\234\261\350\210\252/code/\346\234\215\345\212\241\347\253\257/LogSearch.h" "b/Client/\346\234\261\350\210\252/code/\346\234\215\345\212\241\347\253\257/LogSearch.h"
new file mode 100644
index 0000000..73684e1
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/code/\346\234\215\345\212\241\347\253\257/LogSearch.h"
@@ -0,0 +1,17 @@
+#pragma once
+#include "common.h"
+#include <WinSock2.h>
+#include "mysql1/include/jdbc/mysql_driver.h"
+#include "mysql1/include/jdbc/mysql_connection.h"
+#include "mysql1/include/jdbc/cppconn/prepared_statement.h"
+#include "mysql1/include/jdbc/cppconn/resultset.h"
+#include "mysql1/include/jdbc/cppconn//exception.h"
+#include <iostream>
+class LogSearch
+{
+public:
+ LogSearch();
+ virtual ~LogSearch();
+ bool searchLogBusiness(SOCKET client, LogQueryReq* req);
+};
+
diff --git "a/Client/\346\234\261\350\210\252/log/\346\234\261\350\210\2521105.doc" "b/Client/\346\234\261\350\210\252/log/\346\234\261\350\210\2521105.doc"
new file mode 100644
index 0000000..1d30c29
--- /dev/null
+++ "b/Client/\346\234\261\350\210\252/log/\346\234\261\350\210\2521105.doc"
Binary files differ
diff --git "a/Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1102.doc" "b/Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1104.doc"
similarity index 100%
rename from "Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1102.doc"
rename to "Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1104.doc"
Binary files differ
diff --git "a/Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1105.doc" "b/Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1105.doc"
new file mode 100644
index 0000000..52d368c
--- /dev/null
+++ "b/Client/\346\235\216\345\256\265\345\242\236/log/\345\216\206\345\217\262\346\237\245\350\257\242_\346\235\216\345\256\265\345\242\236_1105.doc"
Binary files differ
diff --git "a/Client/\347\216\213\351\221\253\351\221\253/log/\346\227\245\345\277\227_\347\216\213\351\221\253\351\221\253_1106.doc" "b/Client/\347\216\213\351\221\253\351\221\253/log/\346\227\245\345\277\227_\347\216\213\351\221\253\351\221\253_1106.doc"
new file mode 100644
index 0000000..0c5f5e7
--- /dev/null
+++ "b/Client/\347\216\213\351\221\253\351\221\253/log/\346\227\245\345\277\227_\347\216\213\351\221\253\351\221\253_1106.doc"
Binary files differ
diff --git "a/Client/\347\224\263\347\203\234/log/\346\227\245\345\277\227_\347\224\263\347\203\234_1106.doc" "b/Client/\347\224\263\347\203\234/log/\346\227\245\345\277\227_\347\224\263\347\203\234_1106.doc"
new file mode 100644
index 0000000..4738a32
--- /dev/null
+++ "b/Client/\347\224\263\347\203\234/log/\346\227\245\345\277\227_\347\224\263\347\203\234_1106.doc"
Binary files differ
diff --git "a/Client/\351\203\221\345\207\257\346\226\207/log/\351\203\221\345\207\257\346\226\2071106.doc" "b/Client/\351\203\221\345\207\257\346\226\207/log/\351\203\221\345\207\257\346\226\2071106.doc"
new file mode 100644
index 0000000..ee4c004
--- /dev/null
+++ "b/Client/\351\203\221\345\207\257\346\226\207/log/\351\203\221\345\207\257\346\226\2071106.doc"
Binary files differ
diff --git "a/Client/\351\273\216\345\274\230\351\234\226/log/\350\256\276\345\244\207\347\256\241\347\220\206_\351\273\216\345\274\230\351\234\226_1106.doc" "b/Client/\351\273\216\345\274\230\351\234\226/log/\350\256\276\345\244\207\347\256\241\347\220\206_\351\273\216\345\274\230\351\234\226_1106.doc"
new file mode 100644
index 0000000..4fce824
--- /dev/null
+++ "b/Client/\351\273\216\345\274\230\351\234\226/log/\350\256\276\345\244\207\347\256\241\347\220\206_\351\273\216\345\274\230\351\234\226_1106.doc"
Binary files differ
diff --git "a/Client/\351\276\232\345\220\257\347\245\245/log/\346\227\245\345\277\227\346\250\241\346\235\277_\351\276\232\345\220\257\347\245\245_1106.doc" "b/Client/\351\276\232\345\220\257\347\245\245/log/\346\227\245\345\277\227\346\250\241\346\235\277_\351\276\232\345\220\257\347\245\245_1106.doc"
new file mode 100644
index 0000000..3341269
--- /dev/null
+++ "b/Client/\351\276\232\345\220\257\347\245\245/log/\346\227\245\345\277\227\346\250\241\346\235\277_\351\276\232\345\220\257\347\245\245_1106.doc"
Binary files differ
diff --git "a/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.cpp" "b/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.cpp"
index ce7acb2..2fff64c 100644
--- "a/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.cpp"
+++ "b/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.cpp"
@@ -1,125 +1,101 @@
#include "stdafx.h"
#include "ConnectionPool.h"
-#include <fstream>
-#include <iostream>
-#include <thread>
-
-ConnectionPool* ConnectionPool::getInstance() {
- static ConnectionPool connPool;
- return &connPool;
-}
ConnectionPool::ConnectionPool() {
- // 加载配置文件
- if (!parseJsonFile()) {
- std::cout << "parseJsonFile is failed!" << std::endl;
- return;
- }
- for ( int i = 0 ; i < m_min_conn ; i++ ) {
- addConnection( );
- }
- // 创建一个线程,对连接数进行监控 ,连接数不足就再继续创建
- std::thread producer(&ConnectionPool::produce, this);
- // 对连接数进行监控 ,如果有太多空闲得线程 ,那么就对其进行销毁
- std::thread recycler( &ConnectionPool::recycle, this);
- // 线程分离
- producer.detach();
- recycler.detach();
+
+ m_min_conn = 5; // 假设最小连接数为 5
+ m_max_conn = 10; // 假设最大连接数为 10
+ m_timeout = 1000; // 假设连接超时时间为 1000 毫秒
+ max_del_time = 60000; // 假设最大空闲时间为 60000 毫秒
+
+ for (int i = 0; i < m_min_conn; i++) {
+ addConnection();
+ }
+ // 创建一个线程,对连接数进行监控 ,连接数不足就再继续创建
+ thread producer(&ConnectionPool::produce, this);
+ // 对连接数进行监控 ,如果有太多空闲得线程 ,那么就对其进行销毁
+ thread recycler(&ConnectionPool::recycle, this);
+
+ // 线程分离
+ producer.detach();
+ recycler.detach();
}
-bool ConnectionPool::parseJsonFile() {
-
- /*std::ifstream ifs("dbconf.json");
- Reader rd;
- Value root;
- rd.parse(ifs, root);
- if ( root.isObject( ) ) {
- m_ip = root["ip"].asString();
- m_port = root["port"].asInt();
- m_userName = root["userName"].asString();
- m_passwd = root["password"].asString();
- m_db = root["dbName"].asString();
- m_min_conn = root["minSize"].asInt();
- m_max_conn = root["maxSize"].asInt();
- max_del_time = root["maxDleTime"].asInt();
- m_timeout = root["timeout"].asInt();
- return true;
- }*/
- return false;
-}
-
-void ConnectionPool::description() {
- std::cout << m_ip << ". " << m_userName << ". " << m_passwd << ". " << m_db << ". "
- << m_port << ". " << m_max_conn << ". " << m_min_conn << ". " << m_timeout << ". "
- << max_del_time << std::endl;
-}
ConnectionPool::~ConnectionPool() {
- while (!m_connkQueue.empty()) {
- MysqlConn* conn = m_connkQueue.front();
- m_connkQueue.pop();
- delete conn;
- }
-
+ while (!m_connkQueue.empty()) {
+ MysqlConn* conn = m_connkQueue.front();
+ m_connkQueue.pop();
+ delete conn;
+ }
}
void ConnectionPool::addConnection() {
- MysqlConn* conn = new MysqlConn();
- if ( !conn->connect( m_ip, m_userName, m_passwd, m_db, m_port ) ) {
- std::cout << "ConnectionPool connect to mysql is failed!" << std::endl;
- delete conn;
- return;
- }
- conn->refreshActiveTime( );
- m_connkQueue.push(conn);
- m_cond.notify_one(); // 唤醒一个线程
+ MysqlConn* conn = new MysqlConn();
+ if (!conn->isConnected()) {
+ cout << "ConnectionPool connect to mysql is failed!" << endl;
+ delete conn;
+ return;
+ }
+ conn->refreshActiveTime();
+ m_connkQueue.push(conn);
+ m_cond.notify_one(); // 唤醒一个线程
}
-void ConnectionPool::produce(){
- while (true) {
- std::unique_lock<std::mutex> lock(m_mutex);
- while (m_connkQueue.size() >= m_min_conn) { // 连接队列的数量大于最小的连接数
- m_cond.wait(lock);
- }
- addConnection();
- }
+void ConnectionPool::produce() {
+ while (true) {
+ unique_lock<mutex> lock(m_mutex);
+ while (m_connkQueue.size() >= m_min_conn) { // 连接队列的数量大于最小的连接数
+ m_cond.wait(lock);
+ }
+ addConnection();
+ }
}
// 删除空闲连接
void ConnectionPool::recycle() {
- while ( true ) {
- std::this_thread::sleep_for( std::chrono::milliseconds(500)); // 休眠500 ms
- std::unique_lock<std::mutex>lock(m_mutex);
- while ( m_connkQueue.size() > m_min_conn ) {
- MysqlConn* conn = m_connkQueue.front( );
- if (conn->getActiveTime() >= max_del_time) {
- m_connkQueue.pop();
- delete conn;
- }
- else {
- break;
- }
- }
- }
+ while (true) {
+ this_thread::sleep_for(chrono::milliseconds(500)); // 休眠 500 ms
+ unique_lock<mutex> lock(m_mutex);
+ while (m_connkQueue.size() > m_min_conn) {
+ MysqlConn* conn = m_connkQueue.front();
+ if (conn->getActiveTime() >= max_del_time) {
+ m_connkQueue.pop();
+ delete conn;
+ }
+ else {
+ break;
+ }
+ }
+ }
}
-std::shared_ptr<MysqlConn> ConnectionPool::getMysqlConn() {
-
- std::unique_lock<std::mutex>lock(m_mutex);
- while ( m_connkQueue.empty()) {
- // 如果等待一段时间后,队列还是为空,返回一个 null
- if ( std::cv_status::timeout == m_cond.wait_for(lock, std::chrono::milliseconds(m_timeout)) ) {
- if( m_connkQueue.empty( ) ) return nullptr;
- }
- }
- std::shared_ptr<MysqlConn> connPtr(std::move(m_connkQueue.front()), [this](MysqlConn* conn) {
- std::unique_lock <std::mutex>lock(m_mutex) ;
- conn->refreshActiveTime();
- m_connkQueue.push(conn);
- });
- m_connkQueue.pop();
- m_cond.notify_one(); // 唤醒阻塞的生产者线程,开始生产
- return connPtr;
+shared_ptr<MysqlConn> ConnectionPool::getMysqlConn() {
+ unique_lock<mutex> lock(m_mutex);
+ while (m_connkQueue.empty()) {
+ // 如果等待一段时间后,队列还是为空,返回一个 null
+ if (cv_status::timeout == m_cond.wait_for(lock, chrono::milliseconds(m_timeout))) {
+ if (m_connkQueue.empty()) return nullptr;
+ }
+ }
+ shared_ptr<MysqlConn> connPtr(move(m_connkQueue.front()), [this](MysqlConn* conn) {
+ unique_lock<mutex> lock(m_mutex);
+ conn->refreshActiveTime();
+ m_connkQueue.push(conn);
+ });
+ m_connkQueue.pop();
+ m_cond.notify_one(); // 唤醒阻塞的生产者线程,开始生产
+ return connPtr;
+}
+void ConnectionPool::description() {
+ cout << m_ip << ". " << m_userName << ". " << m_passwd << ". " << m_db << ". "
+ << m_port << ". " << m_max_conn << ". " << m_min_conn << ". " << m_timeout << ". "
+ << max_del_time << endl;
+}
+
+ConnectionPool* ConnectionPool::getInstance() {
+ static ConnectionPool connPool;
+ return &connPool;
}
\ No newline at end of file
diff --git "a/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.h" "b/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.h"
index bce6a07..c78a46e 100644
--- "a/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.h"
+++ "b/Server/\347\216\213\347\220\250\345\205\203/code/ConnectionPool.h"
@@ -1,50 +1,44 @@
#pragma once
-#include <queue>
-#include <mutex>
-#include <condition_variable>
-//#include <json/json.h>
-
#include "MysqlConn.h"
-
-//using namespace Json;
class ConnectionPool
{
public:
- static ConnectionPool* getInstance( );
+ static ConnectionPool* getInstance();
- std::shared_ptr<MysqlConn> getMysqlConn(); // 从数据库连接池获取连接
+ shared_ptr<MysqlConn> getMysqlConn(); // 从数据库连接池获取连接
- ConnectionPool(const ConnectionPool& other) = delete;
- ConnectionPool& operator = (const ConnectionPool & other ) = delete;
-
- ~ConnectionPool();
+ ConnectionPool(const ConnectionPool& other) = delete;
+ ConnectionPool& operator=(const ConnectionPool& other) = delete;
- void description();
+ ~ConnectionPool();
+
+ void description();
protected:
- ConnectionPool( ); // 构造函数
+ ConnectionPool(); // 构造函数
private:
- bool parseJsonFile(); // 解析配置
+ // 不再需要解析配置文件的函数
+ // bool parseJsonFile(); // 解析配置
- void produce();
- void recycle();
- void addConnection(); // 增加连接数
+ void produce();
+ void recycle();
+ void addConnection(); // 增加连接数
- std::string m_ip;
- std::string m_userName;
- std::string m_passwd;
- std::string m_db;
- unsigned short m_port;
+ // 写死的数据库连接参数
+ string m_ip = "127.0.0.1";
+ string m_userName = "root";
+ string m_passwd = "123456";
+ string m_db = "mayi_kunlun";
+ unsigned short m_port = 3306;
- int m_max_conn;
- int m_min_conn;
+ int m_max_conn;
+ int m_min_conn;
- int m_timeout; // 连接超时时间
- int max_del_time; // 最大删除时间( 连接空闲时间超过这个,就给当前连接关闭 )
- std::queue<MysqlConn*>m_connkQueue ; // 连接队列
- std::mutex m_mutex; // 互斥锁
- std::condition_variable m_cond; // 条件变量
+ int m_timeout; // 连接超时时间
+ int max_del_time; // 最大删除时间( 连接空闲时间超过这个,就给当前连接关闭 )
+ queue<MysqlConn*> m_connkQueue; // 连接队列
+ mutex m_mutex; // 互斥锁
+ condition_variable m_cond; // 条件变量
};
-
diff --git "a/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.cpp" "b/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.cpp"
index 5725af8..071cf5f 100644
--- "a/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.cpp"
+++ "b/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.cpp"
@@ -1,37 +1,60 @@
#include "stdafx.h"
#include "MysqlConn.h"
-#include <regex>
+
// 初始化连接
+// 初始化连接
MysqlConn::MysqlConn() {
- mysql_ = mysql_init(mysql_);
- // 设置字符集
- if (mysql_) mysql_set_character_set(mysql_, "gbk");
-}
-
-// 连接数据库
-bool MysqlConn::connect(std::string ip, std::string userName, std::string passwd, std::string db, int port) {
- mysql_ = mysql_real_connect(mysql_, ip.c_str(), userName.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0);
- if (!mysql_) {
- return false;
+ m_mysql = mysql_init(nullptr);
+ if (!m_mysql) {
+ cout << "Failed to initialize MySQL." << endl;
+ return;
}
- return true;
+ // 设置字符集
+ if (m_mysql) mysql_set_character_set(m_mysql, "gbk");
+ // 使用写死的参数连接数据库
+ m_mysql = mysql_real_connect(m_mysql, "127.0.0.1", "root", "123456", "mayi_kunlun", 3306, nullptr, 0);
+ if (!m_mysql) {
+ cout << "MysqlConn connect to mysql is failed!" << endl;
+ // 确保在连接失败时正确清理资源
+ mysql_close(m_mysql);
+ m_mysql = nullptr;
+ }
+ // 初始化 row_ 和 res_
+ m_row = nullptr;
+ m_res = nullptr;
}
+bool MysqlConn::isConnected() {
+ return m_mysql != nullptr;
+}
+// 连接数据库
+//bool MysqlConn::connect() {
+// string ip = "127.0.0.1";
+// string userName = "root";
+// string passwd = "123456";
+// string db = "mayi_kunlun";
+// int port = 3306;
+// m_mysql = mysql_real_connect(mysql_, ip.c_str(), userName.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0);
+// if (!m_mysql) {
+// return false;
+// }
+// return true;
+//}
// 释放资源
MysqlConn::~MysqlConn() {
- if (mysql_) {
- mysql_close(mysql_);
- mysql_ = nullptr;
+ if (m_mysql) {
+ mysql_close(m_mysql);
+ m_mysql = nullptr;
}
freeRes();
}
// 更新数据
-bool MysqlConn::update(std::string sql) {
+bool MysqlConn::update(string sql) {
// 参数化查询优化后的安全检查
- MYSQL_STMT* stmt = mysql_stmt_init(mysql_);
+ MYSQL_STMT* stmt = mysql_stmt_init(m_mysql);
if (!stmt) {
return false;
}
@@ -53,11 +76,36 @@
return true;
}
+bool MysqlConn::query(string sql, vector<vector<string>>& result)
+{
+ freeRes();
+ int ret = mysql_query(m_mysql, sql.c_str());
+ if (ret != 0) {
+ fprintf(stderr, "Query failed: %s\n", mysql_error(m_mysql));
+ return false;
+ }
+ // 获取查询结果
+ m_res = mysql_store_result(m_mysql);
+ if (!m_res) return false;
+ //将结果集转到二维数组result里面
+ //int col_cnt = m_mysql->field_count;
+ int col_cnt = mysql_field_count(m_mysql);
+ cout << col_cnt << endl;
+ while (m_row = mysql_fetch_row(m_res)) {
+ vector<string> tmp;
+ for (int i = 0; i < col_cnt; i++) {
+ tmp.push_back(m_row[i]);
+ }
+ result.push_back(tmp);
+ }
+ return true;
+}
+
// 查询数据库
-bool MysqlConn::query(std::string sql) {
+bool MysqlConn::query(string sql) {
freeRes();
// 参数化查询优化后的安全检查
- MYSQL_STMT* stmt = mysql_stmt_init(mysql_);
+ MYSQL_STMT* stmt = mysql_stmt_init(m_mysql);
if (!stmt) {
return false;
}
@@ -75,8 +123,8 @@
mysql_stmt_close(stmt);
return false;
}
- res_ = mysql_stmt_result_metadata(stmt);
- if (!res_) {
+ m_res = mysql_stmt_result_metadata(stmt);
+ if (!m_row) {
mysql_stmt_close(stmt);
return false;
}
@@ -86,59 +134,60 @@
// 得到结果集
bool MysqlConn::getResult() {
- if (res_) {
- row_ = mysql_fetch_row(res_);
- if (row_) return true;
+ if (m_row) {
+ m_row = mysql_fetch_row(m_res);
+ if (m_row) return true;
}
return false;
}
// 获取结果集的字段
-std::string MysqlConn::getField(int index) {
- int cols = mysql_num_fields(res_);
- if (index >= cols || index < 0) return std::string("");
+string MysqlConn::getField(int index) {
+ int cols = mysql_num_fields(m_res);
+ if (!m_res || index >= cols || index < 0) return string("");
- char* value = row_[index];
- unsigned long len = mysql_fetch_lengths(res_)[index];
- return std::string(value, len);
+ char* value = m_row[index];
+ // 使用显式类型转换
+ unsigned long len = static_cast<unsigned long>(mysql_fetch_lengths(m_res)[index]);
+ return string(value, len);
}
// 事务操作
bool MysqlConn::transaction() {
- return mysql_autocommit(mysql_, false);
+ return mysql_autocommit(m_mysql, false);
}
// 提交事务
bool MysqlConn::commit() {
- return mysql_commit(mysql_);
+ return mysql_commit(m_mysql);
}
// 事务回滚
bool MysqlConn::rollback() {
- return mysql_rollback(mysql_);
+ return mysql_rollback(m_mysql);
}
void MysqlConn::refreshActiveTime() {
- activeTime_ = std::chrono::steady_clock::now();
+ m_activeTime = chrono::steady_clock::now();
}
long long MysqlConn::getActiveTime() {
// 纳米
- std::chrono::nanoseconds nased = std::chrono::steady_clock::now() - activeTime_;
+ chrono::nanoseconds nased = chrono::steady_clock::now() - m_activeTime;
// 转换成毫米
- std::chrono::microseconds millsed = std::chrono::duration_cast<std::chrono::microseconds>(nased);
+ chrono::microseconds millsed = chrono::duration_cast<chrono::microseconds>(nased);
return millsed.count(); // 多少毫秒
}
// 安全校验实现,这里简单使用正则表达式判断是否包含危险字符
-bool MysqlConn::isSqlSafe(const std::string& sql) {
- std::regex dangerousPattern(".*(['\";\\-+=]).*");
- return!std::regex_search(sql, dangerousPattern);
+bool MysqlConn::isSqlSafe(const string& sql) {
+ regex dangerousPattern(".*(['\";\\-+=]).*");
+ return!regex_search(sql, dangerousPattern);
}
void MysqlConn::freeRes() {
- if (res_) {
- mysql_free_result(res_);
- res_ = nullptr;
+ if (m_res) {
+ mysql_free_result(m_res);
+ m_res = nullptr;
}
}
\ No newline at end of file
diff --git "a/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.h" "b/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.h"
index 00c9917..a6506d1 100644
--- "a/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.h"
+++ "b/Server/\347\216\213\347\220\250\345\205\203/code/MysqlConn.h"
@@ -2,48 +2,53 @@
#include <string>
#include <WinSock2.h>
-//#include <mysql.h>
#include "MySQL/include/mysql.h"
#include <string.h>
#include <chrono>
-
+#include <iostream>
+#include <memory>
+#include <queue>
+#include <mutex>
+#include <condition_variable>
+#include <regex>
#pragma comment(lib,"./MySQL/lib/libmysql.lib")
+using namespace std;
class MysqlConn
{
public:
// 初始化连接
MysqlConn();
// 连接数据库
- bool connect(std::string ip, std::string userName, std::string passwd, std::string db , int port = 3306);
+ //bool connect();
// 释放资源
- ~MysqlConn( );
+ ~MysqlConn();
// 更新数据库 ( insert update delete )
- bool update(std::string sql);
+ bool update(string sql);
// 查询数据库
- bool query(std::string sql);
+ bool query(string sql, vector<vector<string>>& result);
+ bool query(string sql);
// 得到结果集
bool getResult();
// 获取结果集的字段
- std::string getField(int index);
+ string getField(int index);
// 事务操作
bool transaction();
// 提交事务
- bool commit( );
+ bool commit();
// 事务回滚
bool rollback();
- void refreshActiveTime( ); // 刷新活跃时间
+
+ void refreshActiveTime(); // 刷新活跃时间
long long getActiveTime(); // 获取当前活跃的时间间隔
// 安全校验接口
- bool isSqlSafe(const std::string& sql);
-
-private:
-
+ bool isSqlSafe(const string& sql);
+ bool isConnected();
+protected:
void freeRes();
- MYSQL* mysql_ = NULL ;
- MYSQL_RES* res_ = NULL;
- MYSQL_ROW row_ = nullptr;
- std::chrono::steady_clock::time_point activeTime_;
+ MYSQL* m_mysql;
+ MYSQL_RES* m_res;
+ MYSQL_ROW m_row;
+ chrono::steady_clock::time_point m_activeTime;
};
-
diff --git "a/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1101.doc" "b/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1101.doc"
index cbc2406..7b25abd 100644
--- "a/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1101.doc"
+++ "b/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1101.doc"
Binary files differ
diff --git "a/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1103 .doc" "b/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1103 .doc"
index 9461d22..02c7ceb 100644
--- "a/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1103 .doc"
+++ "b/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1103 .doc"
Binary files differ
diff --git "a/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1104.doc" "b/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1104.doc"
index 8bda98e..f61ee94 100644
--- "a/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1104.doc"
+++ "b/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1104.doc"
Binary files differ
diff --git "a/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1105.doc" "b/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1105.doc"
new file mode 100644
index 0000000..53afd59
--- /dev/null
+++ "b/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1105.doc"
Binary files differ
diff --git "a/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1106.doc" "b/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1106.doc"
new file mode 100644
index 0000000..6061666
--- /dev/null
+++ "b/Server/\347\216\213\347\220\250\345\205\203/log/\346\227\245\345\277\227\346\250\241\346\235\277_\347\216\213\347\220\250\345\205\203_1106.doc"
Binary files differ
diff --git "a/Server/\351\231\210\346\245\232\344\270\271/log/\346\227\245\345\277\227_\351\231\210\346\245\232\344\270\271_1105.doc" "b/Server/\351\231\210\346\245\232\344\270\271/log/\346\227\245\345\277\227_\351\231\210\346\245\232\344\270\271_1105.doc"
new file mode 100644
index 0000000..6ab23ea
--- /dev/null
+++ "b/Server/\351\231\210\346\245\232\344\270\271/log/\346\227\245\345\277\227_\351\231\210\346\245\232\344\270\271_1105.doc"
Binary files differ
diff --git "a/Server/\351\251\254\346\270\235\346\235\255/log/20241106\346\230\206\344\273\221\346\227\245\346\212\245.doc" "b/Server/\351\251\254\346\270\235\346\235\255/log/20241106\346\230\206\344\273\221\346\227\245\346\212\245.doc"
new file mode 100644
index 0000000..38b1180
--- /dev/null
+++ "b/Server/\351\251\254\346\270\235\346\235\255/log/20241106\346\230\206\344\273\221\346\227\245\346\212\245.doc"
Binary files differ
diff --git "a/Server/\351\251\254\346\270\235\346\235\255/log/\346\227\245\345\277\227_\351\251\254\346\270\235\346\235\255_20241106.doc" "b/Server/\351\251\254\346\270\235\346\235\255/log/\346\227\245\345\277\227_\351\251\254\346\270\235\346\235\255_20241106.doc"
new file mode 100644
index 0000000..02219c4
--- /dev/null
+++ "b/Server/\351\251\254\346\270\235\346\235\255/log/\346\227\245\345\277\227_\351\251\254\346\270\235\346\235\255_20241106.doc"
Binary files differ
diff --git a/common.h b/common.h
index 6d36e1f..7eb4357 100644
--- a/common.h
+++ b/common.h
@@ -50,7 +50,11 @@
//璀︽姤绠$悊
WARNING_REQ, // 璀︽姤璇锋眰
- WARNING_RES, // 璀︽姤鍝嶅簲
+ WARNING_RES, // 璀︽姤鍝嶅簲
+ DATA_REQ, // 鏁版嵁璇锋眰
+ DATA_RES, // 鏁版嵁鍝嶅簲
+ THRESHOLD_REQ, //闃堝�艰姹�
+ THRESHOLD_RES, //闃堝�煎搷搴�
//鐢熶骇璁″垝绠$悊
@@ -351,6 +355,7 @@
{
Head head;
int status;
+ DevicesInfo info[0];
QDRes() {
head.type = QD_RES;
head.len = sizeof(QDRes);
@@ -574,51 +579,99 @@
};
//璀︽姤绠$悊
-// 璀︽姤璇锋眰缁撴瀯浣�
+struct warningInfo {
+ char device_name[32];//璁惧鍚嶇О
+ char des[32];//璀︽姤鎻忚堪
+ char time[32];//璀︽姤鏃堕棿
+ float warningdata;//璀︽姤鏁版嵁
+ char type[16];//璀︽姤绫诲瀷
+ char status[16];//璀︽姤鐘舵��
+};
+
+struct dataInfo {
+ char device_name[32];
+ char type[16];//鐜鏁版嵁绫诲瀷
+ float data;
+ char time[32];//涓婁紶鏁版嵁鏃堕棿
+};
+
+struct threshInfo {
+ char device_name[32];
+ char type[16];//鐜绫诲瀷
+ float min;//鏈�灏忛槇鍊�
+ float max;//鏈�澶ч槇鍊�
+ char time[32];//闃堝�间慨鏀规椂闂�
+};
+
+//璀︽姤璇锋眰缁撴瀯浣�
struct WarningReq {
- Head head;
+ Head head;
+ warningInfo info[0];
- float oxygenWarning;
- float carbonWarning;
- float tempWarning;
- float humidityWarning;
+ WarningReq() {
+ head.type = WARNING_REQ;
+ head.len = sizeof(WarningReq);
+ }
+};
- WarningReq() {
- head.type = WARNING_REQ;
- head.len = sizeof(WarningReq);
- }
+//鏁版嵁璇锋眰缁撴瀯浣�
+struct DataReq {
+ Head head;
+ dataInfo Info[0];
+
+ DataReq() {
+ head.type = DATA_REQ;
+ head.len = sizeof(DataReq);
+ }
+};
+
+//闃堝�艰姹傜粨鏋勪綋
+struct ThresholdReq {
+ Head head;
+ threshInfo threInfo[0];
+
+ ThresholdReq() {
+ head.type = THRESHOLD_REQ;
+ head.len = sizeof(ThresholdReq);
+ }
};
-struct DataThreshold {
- //闃堝��
- float oxygenThreshold;
- float carbonThreshold;
- float tempThreshold;
- float humidityThreshold;
-};
-
-struct Data {
- float oxygen; // 姘ф皵娴撳害
- float carbon; // 涓�姘у寲纰虫祿搴�
- float temp; // 娓╁害
- float humidity; // 婀垮害
-};
-
-// 璀︽姤鍝嶅簲缁撴瀯浣�
+//璀︽姤鍝嶅簲缁撴瀯浣�
struct WarningRes {
- Head head;
- int status; // 鍝嶅簲鐘舵�侊紙姣斿 0 琛ㄧず鎴愬姛锛�1 琛ㄧず澶辫触绛夛級
- const char* message; // 鍝嶅簲娑堟伅鎻忚堪
+ Head head;
+ int status;// 鍝嶅簲鐘舵��
+ warningInfo warninginfo[0];
- WarningRes(int stat, const char* msg) {
- head.type = WARNING_RES;
- head.len = sizeof(WarningRes);
- status = stat;
- message = msg;
- }
+ WarningRes() {
+ head.type = WARNING_RES;
+ head.len = sizeof(WarningRes);
+ }
};
+struct DataRes {
+ Head head;
+ int status;// 鍝嶅簲鐘舵��
+ dataInfo datainfo[0];
+
+ DataRes() {
+ head.type = DATA_RES;
+ head.len = sizeof(DataRes);
+ }
+};
+
+struct ThresholdRes {
+ Head head;
+ int status;// 鍝嶅簲鐘舵��
+ threshInfo threInfo[0];
+
+ ThresholdRes() {
+ head.type = THRESHOLD_RES;
+ head.len = sizeof(ThresholdRes);
+ }
+};
+
+
//鐢熶骇璁″垝绠$悊
struct PdplanInfo
{
diff --git a/kunlun.sql b/kunlun.sql
index aa88b37..bb9d576 100644
--- a/kunlun.sql
+++ b/kunlun.sql
@@ -22,14 +22,17 @@
-- 瀵煎嚭 琛� mayi_kunlun.data_info 缁撴瀯
CREATE TABLE IF NOT EXISTS `data_info` (
`id` int NOT NULL AUTO_INCREMENT,
- `device_id` int DEFAULT NULL,
- `type` varchar(50) DEFAULT NULL,
+ `device_name` varchar(50) DEFAULT NULL,
+ `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`data` float DEFAULT NULL,
- `time` datetime DEFAULT NULL,
+ `time` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='鏁版嵁';
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='鏁版嵁';
--- 姝e湪瀵煎嚭琛� mayi_kunlun.data_info 鐨勬暟鎹細~0 rows (澶х害)
+-- 姝e湪瀵煎嚭琛� mayi_kunlun.data_info 鐨勬暟鎹細~2 rows (澶х害)
+INSERT INTO `data_info` (`id`, `device_name`, `type`, `data`, `time`) VALUES
+ (1, '鍒�', '浣嗘槸', 1, '1'),
+ (2, '鐜�', ' 鐨�', 2, '2');
-- 瀵煎嚭 琛� mayi_kunlun.devices_management_info 缁撴瀯
CREATE TABLE IF NOT EXISTS `devices_management_info` (
@@ -47,13 +50,15 @@
`mark_name` varchar(50) DEFAULT NULL,
`mark_time` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
--- 姝e湪瀵煎嚭琛� mayi_kunlun.devices_management_info 鐨勬暟鎹細~3 rows (澶х害)
+-- 姝e湪瀵煎嚭琛� mayi_kunlun.devices_management_info 鐨勬暟鎹細~5 rows (澶х害)
INSERT INTO `devices_management_info` (`id`, `devices_name`, `devices_type`, `devices_serial_number`, `devices_status`, `area`, `longitude`, `latitude`, `purchasing_time`, `install_time`, `manufacturer`, `mark_name`, `mark_time`) VALUES
- (2, '12', '3', '2', '2', '3', 4, 6, '6', '3', '3', NULL, NULL),
- (3, '3', '1', '3', '3', '1', 2, 5, '6', '3', '6', NULL, NULL),
- (4, '10', '1', '3', '3', '1', 2, 5, '9', '3', '6', NULL, NULL);
+ (6, '6', '6', '6', '6', '8', 8, 8, '8', '8', '8', NULL, NULL),
+ (7, '1', '4', '4', '2', '6', 6, 9, '9', '2', '2', NULL, NULL),
+ (8, '1', '2', '3', '2', '3', 2, 2, '3', '3', '1', NULL, NULL),
+ (9, '10', '2', '3', '2', '3', 2, 2, '3', '3', '1', NULL, NULL),
+ (10, '6', '5', '5', '5', '5', 5, 5, '5', '5', '5', NULL, NULL);
-- 瀵煎嚭 琛� mayi_kunlun.month_info 缁撴瀯
CREATE TABLE IF NOT EXISTS `month_info` (
@@ -70,7 +75,7 @@
-- 瀵煎嚭 琛� mayi_kunlun.parsed_logs 缁撴瀯
CREATE TABLE IF NOT EXISTS `parsed_logs` (
`id` int NOT NULL AUTO_INCREMENT,
- `time_stamp` timestamp NOT NULL DEFAULT (0),
+ `time_stamp` varchar(50) NOT NULL DEFAULT '0',
`device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`level` varchar(16) NOT NULL,
`content` varchar(256) NOT NULL,
@@ -79,9 +84,12 @@
`problem_line` int NOT NULL,
`function_name` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
--- 姝e湪瀵煎嚭琛� mayi_kunlun.parsed_logs 鐨勬暟鎹細~0 rows (澶х害)
+-- 姝e湪瀵煎嚭琛� mayi_kunlun.parsed_logs 鐨勬暟鎹細~2 rows (澶х害)
+INSERT INTO `parsed_logs` (`id`, `time_stamp`, `device_id`, `level`, `content`, `user_id`, `file_name`, `problem_line`, `function_name`) VALUES
+ (1, '2024-05-10 10:05:06', '5', '5', '5', '5', '5', 7, '5'),
+ (2, '2020-05-01 11:05:02', '2', '3', '6', '3', '1', 2, '3');
-- 瀵煎嚭 琛� mayi_kunlun.production_plan 缁撴瀯
CREATE TABLE IF NOT EXISTS `production_plan` (
@@ -117,24 +125,14 @@
-- 姝e湪瀵煎嚭琛� mayi_kunlun.role_info 鐨勬暟鎹細~0 rows (澶х害)
--- 瀵煎嚭 琛� mayi_kunlun.student 缁撴瀯
-CREATE TABLE IF NOT EXISTS `student` (
- `id` int NOT NULL AUTO_INCREMENT,
- `name` varchar(50) DEFAULT NULL,
- `age` int DEFAULT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
--- 姝e湪瀵煎嚭琛� mayi_kunlun.student 鐨勬暟鎹細~0 rows (澶х害)
-
-- 瀵煎嚭 琛� mayi_kunlun.threshold_info 缁撴瀯
CREATE TABLE IF NOT EXISTS `threshold_info` (
`id` int NOT NULL AUTO_INCREMENT,
- `device_id` int DEFAULT NULL,
- `min_threshold` float DEFAULT NULL,
- `max_threshold` float DEFAULT NULL,
+ `device_name` varchar(50) DEFAULT NULL,
`type` varchar(50) DEFAULT NULL,
- `time` datetime DEFAULT NULL,
+ `min` float DEFAULT NULL,
+ `max` float DEFAULT NULL,
+ `time` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='闃堝��';
@@ -184,27 +182,27 @@
`version_description` char(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
`version_creatime` datetime NOT NULL,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
--- 姝e湪瀵煎嚭琛� mayi_kunlun.version_info 鐨勬暟鎹細~2 rows (澶х害)
+-- 姝e湪瀵煎嚭琛� mayi_kunlun.version_info 鐨勬暟鎹細~3 rows (澶х害)
INSERT INTO `version_info` (`id`, `version_id`, `version_id_old`, `version_description`, `version_creatime`) VALUES
(1, '1.3', '1.3', '225', '2024-10-29 15:47:00'),
(2, '1.4', '1.4', '226', '2024-10-30 02:47:30'),
(3, '1.5', '1.5', '227', '2024-11-01 15:48:18');
--- 瀵煎嚭 琛� mayi_kunlun.warningdata_info 缁撴瀯
-CREATE TABLE IF NOT EXISTS `warningdata_info` (
+-- 瀵煎嚭 琛� mayi_kunlun.warning_info 缁撴瀯
+CREATE TABLE IF NOT EXISTS `warning_info` (
`id` int NOT NULL AUTO_INCREMENT,
- `device_id` int NOT NULL,
+ `device_name` varchar(50) NOT NULL DEFAULT '',
+ `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`des` varchar(50) NOT NULL,
- `time` datetime NOT NULL,
- `warningdata` float NOT NULL,
- `type` varchar(50) NOT NULL,
+ `warning_data` float NOT NULL,
+ `time` varchar(50) NOT NULL DEFAULT '',
`status` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='璀︽姤鏁版嵁';
--- 姝e湪瀵煎嚭琛� mayi_kunlun.warningdata_info 鐨勬暟鎹細~0 rows (澶х害)
+-- 姝e湪瀵煎嚭琛� mayi_kunlun.warning_info 鐨勬暟鎹細~0 rows (澶х害)
/*!40103 SET TIME_ZONE=IFNULL(@OLD_TIME_ZONE, 'system') */;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
diff --git "a/~$\350\241\250.docx" "b/~$\350\241\250.docx"
deleted file mode 100644
index 8b245e2..0000000
--- "a/~$\350\241\250.docx"
+++ /dev/null
Binary files differ
diff --git "a/\350\241\250.docx" "b/\350\241\250.docx"
index 02d41c8..bc46585 100644
--- "a/\350\241\250.docx"
+++ "b/\350\241\250.docx"
Binary files differ
--
Gitblit v1.8.0