Client/¼½ºÆêÆ/document/Éú²ú¼Æ»®¹ÜÀí_ÐèÇó·ÖÎö.docxBinary files differ
Client/¼½ºÆêÆ/log/ÈÕÖ¾_¼½ºÆêÆ_1031.docBinary files differ
Client/Áõ×Óº½/log/ÈÕÖ¾_Áõ×Óº½_1101.docBinary files differ
Client/½ª¿É¸ý/code/2024kunlun_project_permisson/2024kunlun_project_permisson.pro.user
@@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE QtCreatorProject> <!-- Written by QtCreator 4.5.0, 2024-10-31T15:06:39. --> <!-- Written by QtCreator 4.5.0, 2024-10-31T16:02:45. --> <qtcreator> <data> <variable>EnvironmentId</variable> Client/½ª¿É¸ý/code/2024kunlun_project_permisson/PmsClientSocket.cpp
@@ -68,10 +68,9 @@ res = (QueryPmsResponse *)buf.data(); if(res->success){ vector<PmsQueryResult> vecs; for(int i =0;i<100;i++){ PmsRes structRes =res->pmsList[i]; if(*(int *)&structRes){ int pmsLen = res->head.len-sizeof(QueryPmsResponse); for(int i =0;i<pmsLen;i+=sizeof(PmsRes)){ PmsRes structRes = *(PmsRes*)(res + sizeof(QueryPmsResponse) + i*sizeof(PmsRes)); PmsQueryResult res; res.setName(string(structRes.name)); res.setUserNo(string(structRes.userNo)); @@ -83,12 +82,8 @@ res.setDevManage(structRes.devManage); res.setProductPlan(structRes.productPlan); res.setQueryHistory(structRes.queryHistory); res.setPermissonType(string(structRes.permissonType)); vecs.push_back(res); }else break; } if(!vecs.empty()){ emit notifyDateChange(vecs); Client/½ª¿É¸ý/code/2024kunlun_project_permisson/PmsClientSocket.h
@@ -72,11 +72,12 @@ typedef struct UserAboutPmsResponse{ Head head; int success; // 1为æå ,0为失败 PmsRes pmsList[100]; //PmsRes pmsList[100]; char pmsList[0]; UserAboutPmsResponse(){ head.type=QUERY_PMS_RES; memset(pmsList,0,sizeof(PmsRes)); head.len = sizeof(UserAboutPmsResponse); // memset(pmsList,0,sizeof(PmsRes)); // head.len = sizeof(UserAboutPmsResponse); } } QueryPmsResponse; Client/½ª¿É¸ý/code/2024kunlun_project_permisson/main.cpp
@@ -6,6 +6,8 @@ QApplication a(argc, argv); PermissonWindow w; w.show(); QString dlgTitle = "æ´æ°ç»æ"; QString strInfo = "æéä¿¡æ¯æ´æ°æå"; return a.exec(); } Client/½ª¿É¸ý/code/2024kunlun_project_permisson/permissondialog.cpp
@@ -66,6 +66,8 @@ btnList[3][res.getDevManage()]->setChecked(true); btnList[4][res.getProductPlan()]->setChecked(true); curRes = res; } @@ -80,7 +82,7 @@ param.setDevManage(findBoxCheck(btnList[3])); param.setProductPlan(findBoxCheck(btnList[4])); param.setRoleId(curRes.getRoleId()); client->updatePmsByParam(param); } Client/½ª¿É¸ý/code/2024kunlun_project_permisson/permissondialog.h
@@ -28,6 +28,8 @@ int findBoxCheck(map<int,QRadioButton *> map); PmsQueryResult curRes; private slots: void recvUserNo(PmsQueryResult pms); void on_buttonBox_accepted(); Client/½ª¿É¸ý/code/2024kunlun_project_permisson/permissonwindow.cpp
@@ -78,9 +78,11 @@ connect(ac1,&QAction::triggered,[=]{ int row = ui->tableView->currentIndex().row(); qDebug() << globalPms[row].getDevManage(); qDebug() << "æ´æ°å½åå工信æ¯" << QString::fromStdString( globalPms[row].getUserNo()); // åéåå·¥ç¼å·ä¿¡æ¯ emit sendUserNo(globalPms[row]); @@ -99,7 +101,9 @@ if(watch == ui->tableView->viewport() || watch == ui->tableView->verticalHeader()->viewport() || watch == ui->tableView->horizontalHeader()->viewport()){ if(event->type()==QEvent::MouseButtonPress && ((QMouseEvent *)event)->button()==Qt::RightButton){ if(event->type()==QEvent::MouseButtonPress && ((QMouseEvent *)event)->button()==Qt::RightButton && m_model->rowCount() > 0){ m->exec(QCursor::pos()); } @@ -132,12 +136,14 @@ void PermissonWindow::listenItemChange(QStandardItem *item) { qDebug() << "æ°æ®å¼å§æ´æ°"; QString localText = item->text(); PmsPlusParma pm; pm.setPermissonType(localText.toStdString()); pm.setRoleId(roleMap[localText.toStdString()]); clientSocket->updatePmsByParam(pm); if(roleMap.count(localText.toStdString())){ qDebug() << "åèµ·è使´æ°è¯·æ±"; PmsPlusParma pm; pm.setPermissonType(localText.toStdString()); pm.setRoleId(roleMap[localText.toStdString()]); clientSocket->updatePmsByParam(pm); } } void PermissonWindow::renderItemData(vector<PmsQueryResult> res) Client/½ª¿É¸ý/code/2024kunlun_project_permisson/permissonwindow.h
@@ -10,6 +10,8 @@ #include "syncdatatodb.h" #include "PmsClientSocket.h" #include <QMessageBox> using namespace std; Client/½ª¿É¸ý/log/½ª¿É¸ý_1030.docBinary files differ
Client/½ª¿É¸ý/log/½ª¿É¸ý_1031.docBinary files differ
Client/½ª¿É¸ý/log/½ª¿É¸ý_1101.docBinary files differ
Client/ËÎê»i/log/ÈÕÖ¾_ËÎê»i_1101.docBinary files differ
Client/ÀîÏüÔö/document/ÀúÊ·²éѯ·ÖÎöÄ£¿éÐèÇó·ÖÎö.docxBinary files differ
Client/ÀîÏüÔö/log/ÀúÊ·²éѯ_ÀîÏüÔö_1030.docBinary files differ
Client/ÀîÏüÔö/log/ÀúÊ·²éѯ_ÀîÏüÔö_1031.docBinary files differ
Client/ÍõöÎöÎ/log/ÈÕÖ¾_ÍõöÎöÎ_1031.docBinary files differ
Client/ÍõöÎöÎ/log/À¥ÂØ_1101ÏîÄ¿ÈÕ±¨.docBinary files differ
Client/Éê@/log/ÈÕÖ¾_Éê@_1031.docBinary files differ
Client/Éê@/log/ÈÕÖ¾_Éê@_1101.docBinary files differ
Client/Ö£¿ÎÄ/document/À¥ÂØ1031_ÏîÄ¿ÈÕ±¨.docBinary files differ
Client/Ö£¿ÎÄ/log/Ö£¿ÎÄ1101.docBinary files differ
Client/ÀèºëÁØ/code/Devices_Management_Struct.h
New file @@ -0,0 +1,121 @@ #pragma once enum TypeInfo { AD_Req,//æ·»å 设å¤è¯·æ± AD_Res,//æ·»å 设å¤ååº CD_Req,//å ³é设å¤è¯·æ± CD_Res,//å ³é设å¤è¯·æ± PD_Req,//æå设å¤è¯·æ± PD_Res,//æå设å¤è¯·æ± }; struct Head { int type; int len; }; //æ·»å è®¾å¤ struct ADReq { Head head; char Device_Name[32]; ADReq() { head.type = AD_Req; head.len = sizeof(AD_Req); } }; struct ADPermission { char Device_Name[32]; char Device_Status[32]; char Manufacturer[100]; char Devices_Type[32]; double Longitude; double Latitude; }; struct ADRes { Head head; char Device_Name[32]; char Device_Status[32]; char Start_Time[32]; char Work_Time[32]; char Manufacturer[100]; char Devices_Type[32]; double Longitude; double Latitude; ADPermission per; ADRes() { head.type = AD_Res; head.len = sizeof(ADRes); } }; //å ³éè®¾å¤ struct CDReq { Head head; char Device_Name[32]; CDReq() { head.type = CD_Req; head.len = sizeof(CDReq); } }; struct CDPermission { char Device_Name[32]; char Device_Status[32]; char Start_Time[32]; char Work_Time[32]; char Manufacturer[100]; char Devices_Type[32]; double Longitude; double Latitude; }; struct CDRes { Head head; char Device_Status[32]; int status; CDPermission per; CDRes() { head.type = CD_Res; head.len = sizeof(CDRes); } }; //æåè®¾å¤ struct PDReq { Head head; char Device_Name[32]; PDReq() { head.type = PD_Req; head.len = sizeof(PDReq); } }; struct PDPermission { char Device_Name[32]; char Device_Status[32]; char Start_Time[32]; char Work_Time[32]; char Manufacturer[100]; char Devices_Type[32]; double Longitude; double Latitude; }; struct PDRes { Head head; char Device_Status[32]; char Work_Time[32]; int status; PDPermission per; PDRes() { head.type = PD_Res; head.len = sizeof(PDRes); } }; Client/ÀèºëÁØ/code/device_management.zipBinary files differ
Client/ÀèºëÁØ/log/É豸¹ÜÀí_ÀèºëÁØ_1031.docBinary files differ
Client/ÀèºëÁØ/log/É豸¹ÜÀí_ÀèºëÁØ_1101.docBinary files differ
Server/Àîתת/log/ÅäÖùÜÀí_1101.docBinary files differ
Server/ºú¼ÒÃ÷/log/ÈÕÖ¾_ºú¼ÒÃ÷_1031.docBinary files differ
Server/³Â³þµ¤/log/ÈÕÖ¾_³Â³þµ¤_1031.docBinary files differ
Server/ÂíÀöƼ/code/log/log.cpp
@@ -1,21 +1,14 @@ #include <string.h> #include <time.h> #include <chrono> #include <ctime> #include <stdarg.h> #include "log.h" #include <sstream> #include <fstream> #include <iostream> #include <chrono> using namespace std; // æé 彿° Log::Log() { m_count = 0; // åå§åæ¥å¿è¡æ° m_is_async = false; // åå§åä¸ºåæ¥ } Log::Log() : m_count(0), m_is_async(false) {} // ææå½æ° Log::~Log() { @@ -24,31 +17,82 @@ } } // æ¥æ¶åå§æ¥å¿å¹¶è§£æ void Log::receiveLog(const std::string &raw_log) { ParsedLog parsed_log = parseLog(raw_log); write_log(levelToInt(parsed_log.level), "%s [%s] %s", parsed_log.timestamp.c_str(), parsed_log.device_id.c_str(), parsed_log.content.c_str()); //弿¥åå ¥ void Log::async_write_log() { while (m_is_async) { char* log; if (m_log_queue->pop(log)) { ParsedLog parsed_log = parseLog(log); write_log(INFO, "%s", log); // å åå ¥æ¥å¿æä»¶ writeLogToDatabase(parsed_log); // ååå ¥æ°æ®åº delete[] log; // éæ¾å å } } } bool Log::check_log_size() { if (m_fp.tellp() >= max_size) { rotate_logs(); // 妿æ¥å¿æä»¶å¤§å°è¶ è¿æå¤§å¼ï¼è½®æ¢æ¥å¿ return true; } return false; } // æ¥æ¶åå§æ¥å¿å¹¶è§£æ void Log::receiveLog(const char* raw_log) { ParsedLog parsed_log = parseLog(raw_log); write_log(levelToInt(parsed_log.level), "%s [%s] %s", parsed_log.timestamp, parsed_log.device_id, parsed_log.content); } //åå ¥æ°æ®åº void Log::writeLogToDatabase(const ParsedLog& log) { const char* sql = "INSERT INTO parsed_logs (timestamp, device_id, level, content, source, user_id) VALUES (?, ?, ?, ?, ?, ?)"; sqlite3_stmt* stmt; if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) != SQLITE_OK) { cerr << "Error: Failed to prepare statement: " << sqlite3_errmsg(db) << endl; return; } sqlite3_bind_text(stmt, 1, log.timestamp, -1, SQLITE_STATIC); sqlite3_bind_text(stmt, 2, log.device_id, -1, SQLITE_STATIC); sqlite3_bind_text(stmt, 3, log.level, -1, SQLITE_STATIC); sqlite3_bind_text(stmt, 4, log.content, -1, SQLITE_STATIC); sqlite3_bind_text(stmt, 5, log.source, -1, SQLITE_STATIC); sqlite3_bind_text(stmt, 6, log.user_id, -1, SQLITE_STATIC); if (sqlite3_step(stmt) != SQLITE_DONE) { cerr << "Error: Failed to execute statement: " << sqlite3_errmsg(db) << endl; } sqlite3_finalize(stmt); // æ¸ çåå¤è¯å¥ } // è§£ææ¥å¿å符串 ParsedLog Log::parseLog(const std::string &log) { ParsedLog Log::parseLog(const char* log) { ParsedLog parsed_log; std::istringstream iss(log); std::string level; char level[16]; // è¯»åæ¶é´æ³ã设å¤ID忥å¿çº§å« iss >> parsed_log.timestamp >> parsed_log.device_id >> level; std::getline(iss, parsed_log.content); parsed_log.level = level; // 设置解æåççº§å« sscanf(log, "%s %s %s %[^\n]", parsed_log.timestamp, parsed_log.device_id, level, parsed_log.content); // 设置解æåççº§å« for (int i = 0; i < 16; ++i) { parsed_log.level[i] = level[i]; } return parsed_log; } // åå§åæ¥å¿ç³»ç» bool Log::init(const std::string &file_name, int close_log, int log_buf_size, int split_lines, int max_queue_size) { bool Log::init(const char* file_name, int close_log, int log_buf_size, int split_lines, int max_queue_size) { if (max_queue_size >= 1) { m_is_async = true; // å¯ç¨å¼æ¥åå ¥ m_log_queue = new block_queue<string>(max_queue_size); // å建é»å¡éå m_log_queue = new block_queue<char*>(max_queue_size); // å建é»å¡éå std::thread(&Log::flush_log_thread, this).detach(); // åå»ºå·æ°æ¥å¿çº¿ç¨ } @@ -60,43 +104,76 @@ time_t t = time(NULL); struct tm *sys_tm = localtime(&t); std::string log_full_name; char log_full_name[256]; // æ ¹æ®æä»¶è·¯å¾åå½åæ¥æçæå®æ´æ¥å¿æä»¶å if (file_name.find('/') == std::string::npos) { log_full_name = to_string(sys_tm->tm_year + 1900) + "_" + to_string(sys_tm->tm_mon + 1) + "_" + to_string(sys_tm->tm_mday) + "_" + file_name; if (strchr(file_name, '/') == nullptr) { sprintf(log_full_name, "%d_%d_%d_%s", sys_tm->tm_year + 1900, sys_tm->tm_mon + 1, sys_tm->tm_mday, file_name); } else { std::string log_name = file_name.substr(file_name.find_last_of('/') + 1); std::string dir_name = file_name.substr(0, file_name.find_last_of('/') + 1); log_full_name = dir_name + to_string(sys_tm->tm_year + 1900) + "_" + to_string(sys_tm->tm_mon + 1) + "_" + to_string(sys_tm->tm_mday) + "_" + log_name; char log_name[128]; char dir_name[128]; char* last_slash = strrchr(file_name, '/'); int dir_len = last_slash - file_name + 1; strncpy(dir_name, file_name, dir_len); dir_name[dir_len] = '\0'; strcpy(log_name, last_slash + 1); sprintf(log_full_name, "%s%d_%d_%d_%s", dir_name, sys_tm->tm_year + 1900, sys_tm->tm_mon + 1, sys_tm->tm_mday, log_name); } m_today = sys_tm->tm_mday; // è®°å½ä»å¤©çæ¥æ m_fp.open(log_full_name, std::ios::out | std::ios::app); // æå¼æ¥å¿æä»¶ if (!m_fp.is_open()) { cerr << "Error: Could not open log file: " << log_full_name << endl; return false; // æå¼å¤±è´¥ } return true; // åå§åæå } #include <chrono> //æ¥è¯¢æ¥å¿èæ void Log::queryLogs(const char *device_id) { const char* sql = "SELECT * FROM parsed_logs WHERE device_id = ?"; sqlite3_stmt* stmt; if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) != SQLITE_OK) { cerr << "Error: Failed to prepare statement: " << sqlite3_errmsg(db) << endl; return; } sqlite3_bind_text(stmt, 1, device_id, -1, SQLITE_STATIC); while (sqlite3_step(stmt) == SQLITE_ROW) { cout << "Timestamp: " << sqlite3_column_text(stmt, 1) << ", " << "Device ID: " << sqlite3_column_text(stmt, 2) << ", " << "Level: " << sqlite3_column_text(stmt, 3) << ", " << "Content: " << sqlite3_column_text(stmt, 4) << ", " << "Source: " << sqlite3_column_text(stmt, 5) << ", " << "User ID: " << sqlite3_column_text(stmt, 6) << endl; } sqlite3_finalize(stmt); // æ¸ çåå¤è¯å¥ } // åå ¥æ¥å¿ void Log::write_log(int level, const char *format, ...) { auto now = std::chrono::system_clock::now(); auto now_time_t = std::chrono::system_clock::to_time_t(now); struct tm *sys_tm = localtime(&now_time_t); std::string s; char s[32]; // æ ¹æ®æ¥å¿çº§å«è®¾ç½®åç¼ switch (level) { case DEBUG: s = "[debug]: "; break; case INFO: s = "[info]: "; break; case WARN: s = "[warn]: "; break; case ERROR: s = "[error]: "; break; default: s = "[info]: "; break; case DEBUG: strcpy(s, "[debug]: "); break; case INFO: strcpy(s, "[info]: "); break; case WARN: strcpy(s, "[warn]: "); break; case ERROR: strcpy(s, "[error]: "); break; default: strcpy(s, "[info]: "); break; } m_mutex.lock(); // éå®äºæ¥ä½ @@ -104,7 +181,7 @@ // æ£æ¥æ¯å¦éè¦è½®æ¢æ¥å¿ if (m_today != sys_tm->tm_mday || m_count % m_split_lines == 0) { // ... (æ¥å¿è½®æ¢ä»£ç ) rotate_logs(); // è°ç¨æ¥å¿è½®æ¢å½æ° } // åå ¥æ¥å¿å 容 @@ -113,6 +190,7 @@ vsnprintf(m_buf, m_log_buf_size, format, valist); // åå ¥æ¥å¿å 容 m_fp << s << m_buf << std::endl; // 使ç¨ofstreamåå ¥æä»¶ va_end(valist); m_mutex.unlock(); // è§£éäºæ¥ä½ @@ -133,18 +211,65 @@ void Log::flush_log_thread() { while (m_is_async) { // ä»éåä¸è·åæ¥å¿å¹¶åå ¥ string log; char* log; if (m_log_queue->pop(log)) { write_log(INFO, "%s", log.c_str()); write_log(INFO, "%s", log); } } } //转æ¢å符串 const char* Log::log_level_to_string(int level) { switch (level) { case DEBUG: return "[debug]: "; case INFO: return "[info]: "; case WARN: return "[warn]: "; case ERROR: return "[error]: "; default: return "[info]: "; // é»è®¤è¿åINFO } } // æ¥å¿çº§å«è½¬æ¢ä¸ºæ´æ° int Log::levelToInt(const std::string &level) { if (level == "[debug]:") return DEBUG; if (level == "[info]:") return INFO; if (level == "[warn]:") return WARN; if (level == "[error]:") return ERROR; int Log::levelToInt(const char* level) { if (strcmp(level, "[debug]:") == 0) return DEBUG; if (strcmp(level, "[info]:") == 0) return INFO; if (strcmp(level, "[warn]:") == 0) return WARN; if (strcmp(level, "[error]:") == 0) return ERROR; return INFO; // é»è®¤è¿åINFO } //æå¼å ³éæ°æ®åº void Log::openDatabase(const char *db_name) { if (sqlite3_open(db_name, &db) != SQLITE_OK) { cerr << "æä¸å¼æ°æ®åºï¼ï¼éè¯¯ï¼ " << sqlite3_errmsg(db) << endl; } } void Log::closeDatabase() { if (db) { sqlite3_close(db); } } // æ¥å¿è½®æ¢å½æ° void Log::rotate_logs() { // å ³éå½åæä»¶ m_fp.close(); // çææ°æä»¶å time_t t = time(NULL); struct tm *sys_tm = localtime(&t); char new_log_name[256]; sprintf(new_log_name, "%d_%d_%d_log.txt", sys_tm->tm_year + 1900, sys_tm->tm_mon + 1, sys_tm->tm_mday); // æå¼æ°çæ¥å¿æä»¶ m_fp.open(new_log_name, std::ios::out | std::ios::app); if (!m_fp.is_open()) { cerr << "Error: Could not open new log file: " << new_log_name << endl; return; } m_today = sys_tm->tm_mday; // æ´æ°ä»å¤©çæ¥æ m_count = 0; // éç½®æ¥å¿è®¡æ° } Server/ÂíÀöƼ/code/log/log.h
@@ -3,12 +3,12 @@ #include <stdio.h> #include <iostream> #include <string> #include <stdarg.h> #include <thread> #include <thread> #include "block_queue.h" #include "locker.h" // ç¡®ä¿ locker.h 被å å« #include "locker.h" #include <fstream> #include <sqlite3.h> // æ·»å SQLite æ°æ®åºç头æä»¶ using namespace std; @@ -22,10 +22,12 @@ // åå¨è§£ææ¥å¿æä»¶çç»æä½ struct ParsedLog { std::string timestamp; // æ¶é´æ³ std::string device_id; // 设å¤ID std::string level; // æ¥å¿çº§å« std::string content; // æ¥å¿å 容 char timestamp[64]; // æ¶é´æ³ char device_id[64]; // 设å¤ID char level[16]; // æ¥å¿çº§å« char content[256]; // æ¥å¿å 容 char source[64]; // æ¥æºæ¨¡å char user_id[64]; // ç¨æ·ID }; class Log @@ -42,17 +44,19 @@ void flush_log_thread(); // ä¿®æ¹ä¸ºééææå彿° // åå§åæ¥å¿ç³»ç»ï¼åæ°å æ¬æä»¶åãæ¯å¦å ³éæ¥å¿ãç¼å²åºå¤§å°ãæå¤§è¡æ°åæå¤§éåå¤§å° bool Log::init(const char *file_name, int close_log, int log_buf_size, int split_lines, int max_queue_size); bool init(const char *file_name, int close_log, int log_buf_size, int split_lines, int max_queue_size); // åå ¥æ¥å¿ void write_log(int level, const char *format, ...); // å·æ°æ¥å¿æä»¶ void flush(void); //æ¥æ¶åå§çè¦å ¬å ±ç±» void receiveLog(const std::string& raw_log); // æ¥æ¶åå§æ¥å¿ // æ¥æ¶åå§æ¥å¿ void receiveLog(const char* raw_log); // å°æ¥å¿åå ¥æ°æ®åº void writeLogToDatabase(const ParsedLog& log); private: Log(); // æé 彿° @@ -62,12 +66,12 @@ bool check_log_size(); // æ£æ¥æ¥å¿æä»¶å¤§å° void rotate_logs(); // è½®æ¢æ¥å¿æä»¶ ParsedLog parseLog(const std::string& log); // è§£ææ¥å¿ bool init(const std::string &file_name, int close_log, int log_buf_size, int split_lines, int max_queue_size); void queryLogs(const std::string &device_id); // æ¥è¯¢æ¥å¿ ParsedLog parseLog(const char* log); // è§£ææ¥å¿ bool init(const char *file_name, int close_log, int log_buf_size, int split_lines, int max_queue_size); void queryLogs(const char *device_id); // æ¥è¯¢æ¥å¿ const char* log_level_to_string(int level); // å°æ¥å¿çº§å«è½¬æ¢ä¸ºå符串 int levelToInt(const std::string &level); int levelToInt(const char *level); private: char dir_name[128]; // æ¥å¿æä»¶ç®å½ @@ -78,16 +82,18 @@ int m_today; // è®°å½å½åæ¶é´ std::ofstream m_fp; // å° FILE * m_fp æ´æ¹ä¸º std::ofstream m_fp char *m_buf; // æ¥å¿ç¼å²åº block_queue<string> *m_log_queue; // é»å¡éå block_queue<char*> *m_log_queue; // é»å¡éå bool m_is_async; // æ¯å¦å¼æ¥æ å¿ä½ locker m_mutex; // äºæ¥é int m_close_log; // å ³éæ¥å¿çæ å¿ long max_size = 10 * 1024 * 1024; // 10MB //æµè¯æä»¶éé¢ç int m_close_log; // ç¡®ä¿å¨è¿éå®ä¹ long max_size = 10 * 1024 * 1024; // å个æ¥å¿æä»¶çå¤§å° 10MB // æ°æ®åºç¸å ³ sqlite3 *db; // SQLite æ°æ®åºæé void openDatabase(const char *db_name); // æå¼æ°æ®åº void closeDatabase(); // å ³éæ°æ®åº }; // å®å®ä¹ç¨äºä¸å级å«çæ¥å¿è®°å½ #define LOG_DEBUG(format, ...) if(0 == m_close_log) {Log::get_instance()->write_log(DEBUG, format, ##__VA_ARGS__); Log::get_instance()->flush();} #define LOG_INFO(format, ...) if(0 == m_close_log) {Log::get_instance()->write_log(INFO, format, ##__VA_ARGS__); Log::get_instance()->flush();} #define LOG_WARN(format, ...) if(0 == m_close_log) {Log::get_instance()->write_log(WARN, format, ##__VA_ARGS__); Log::get_instance()->flush();} Server/ÂíÀöƼ/document/ÈÕÖ¾ÐèÇó·ÖÎöÎĵµ.docxBinary files differ
Server/ÂíÀöƼ/log/log_1031.docBinary files differ
Server/ÂíÓ庼/log/20241031À¥ÂØÈÕ±¨.docBinary files differ
common.h
New file @@ -0,0 +1,873 @@ #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, // æè§è²idæ´æ°æéä¿¡æ¯è¯·æ± QUERY_PMS_RES, // æ¥è¯¢äººååè§è²ä¿¡æ¯çååºç»æä½ UPDATE_PMS_RES, // æéæ´æ°ç»æååºä½ //设å¤ç®¡ç AD_Req,//æ·»å 设å¤è¯·æ± AD_Res,//æ·»å 设å¤ååº CD_Req,//å ³é设å¤è¯·æ± CD_Res,//å ³é设å¤è¯·æ± PD_Req,//æå设å¤è¯·æ± PD_Res,//æå设å¤è¯·æ± //å°å¾æ 注 MAPMARK_REQ,//å°å¾æ æ³¨è¯·æ± MAPMARK_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_PRODUCTION_PLAN_REQ,//æ·»å ä¸è¡æ°æ®ç请æ±ç»æä½ ADD_PRODUCTION_PLAN_RES,//æ·»å ä¸è¡æ°æ®çååºç»æä½ UPDATE_PRODUCTION_PLAN_QUANTITY_REQ,// æ´æ°ç产计åï¼è®¡åç产éï¼ç请æ±ç»æä½ UPDATE_PRODUCTION_PLAN_QUANTITY_RES,// æ´æ°ç产计åï¼è®¡åç产éï¼çååºç»æä½ UPDATE_PRODUCTION_PLAN_LOG_REQ,//æ´æ°ç产计åï¼æ¥å¿ï¼ç请æ±ç»æä½ UPDATE_PRODUCTION_PLAN_LOG_RES,//æ´æ°ç产计åï¼æ¥å¿ï¼çååºç»æä½ PRODUCTION_PLAN_REQ,// æ¥è¯¢ç产计åä¿¡æ¯ç请æ±ç»æä½ PRODUCTION_PLAN_RES,// æ¥è¯¢ç产计åä¿¡æ¯çååºç»æä½ FORRECENT_FOURTEEN_PRODUCTION_PLANS_REQ,//æ¥è¯¢è¿ååæ¡ç请æ±ç»æä½ FORRECENT_FOURTEEN_PRODUCTION_PLANS_RES //æ¥è¯¢è¿ååæ¡çååºç»æä½ //å岿¥è¯¢åæ HISTORY_QUERY_REQ, // å岿¥è¯¢è¯·æ± HISTORY_QUERY_RES, // å岿¥è¯¢ååº //èªå¨å级 VERSIONNUM_REQ, // çæ¬å·è¯·æ± VERSIONNUM_RES, // çæ¬å·ååº UPLOAD_FILE_REQ, // ä¸ä¼ æä»¶çè¯·æ± UPLOAD_FILE_RES, // ä¸ä¼ æä»¶çååº VERSIONINFOENTRY_REQ, // çæ¬ä¿¡æ¯å½å ¥è¯·æ± VERSIONINFOENTRY_RES, //çæ¬ä¿¡æ¯å½å ¥ååº VERSIONUPDATE_REQ, // çæ¬æ´æ°è¯·æ± VERSIONUPDATE_RES, // çæ¬æ´æ°ååº FILEDOWNLOADS_REQ, // çæ¬æ´æ°æä»¶ä¸è½½è¯·æ± FILEDOWNLOADS_RES, // çæ¬æ´æ°æä»¶ä¸è½½ååº DOWNLOADSUCCESSFULLY_RES // æ´æ°æä»¶ä¸è½½æåçååº //æ¥å¿ LOGSEARCH_REQ;//æ¥å¿æ¥è¯¢è¯·æ± LOGSEARCH_RES;//æ¥å¿æ¥è¯¢ååº }; struct Head{ int type; int len; }; //注åç»å½ //ç»å½è¯·æ± struct LoginReq { Head head; char user_name[32]; char password[32]; LoginReq(){ head.type = LOGIN_REQ; head.len = sizeof(LoginReq); } }; struct Permission { int admin; int log_search; //æ¥å¿æ¥è¯¢ int history; //åå²è®°å½ int map_change;//å°å¾ int version_manage; // çæ¬ç®¡ç int warning; //è¦æ¥ int device_manage; //设å¤ç®¡ç int pro_plan;//ç产计å char role_name[32]; // è§è²å }; //ç»å½ååº struct LoginRes { Head head; char user_name[32]; int status; // ç»å½ç¶æ // ç»å½æåæ¶ï¼è¯¥è´¦å·å¯¹åºçæéç»å Permission per; LoginRes() { head.type = LOGIN_RES; head.len = sizeof(LoginRes); }; }; //注åè¯·æ± struct RegisterReq { Head head; char user_name[32]; char password[32]; char email[50]; int telephone; RegisterReq(){ head.type = REGISTER_REQ; head.len = sizeof(RegisterReq); } }; //注åååº struct RegisterRes { Head head; char user_name[32]; int status; // 注åç¶æ //注åæåï¼é»è®¤æå°æéç»å Permission per; RegisterRes() { head.type = REGISTER_RES; head.len = sizeof(RegisterRes); }; }; //éç½®å¯ç è¯·æ± struct ResetReq { Head head; char email[50]; char password[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); }; }; //æé管ç // æåå·¥ç¼å·ãååæè使¥è¯¢äººåæéä¿¡æ¯è¯·æ± typedef struct QueryPmsRequest{ Head head; char userNo[32]; char name[32]; char permissonType[32]; QueryPmsRequest(){ head.type=QUERY_PMS_REQ; memset(userNo,0,32); memset(permissonType,0,32); memset(name,0,32); head.len = sizeof(QueryPmsRequest); } } QueryPmsRequest; // æè§è²idæ´æ°æéä¿¡æ¯è¯·æ± typedef struct UpdatePmsRequest{ Head head; int roleId; int queryHistory; int loggerSearch; int mapMark; int devManage; int productPlan; UpdatePmsRequest(){ head.type=QUERY_PMS_RES; head.len = sizeof(UpdatePmsRequest); } } UpdatePmsRequest; // å个人åæéç»æä½ typedef struct PmsRes{ int queryHistory; int loggerSearch; int mapMark; int devManage; int productPlan; int roleId; char userNo[32]; char name[32]; char permissonType[32]; char startDateTime[32]; char endDateTime[32]; } PmsRes; // æ¥è¯¢äººååè§è²ä¿¡æ¯çååºç»æä½ typedef struct QueryPmsResponse{ Head head; int success; // 1为æå ,0为失败 char pmsList[0]; QueryPmsResponse(){ head.type=QUERY_PMS_RES; } } QueryPmsResponse; // æéæ´æ°ç»æååºä½ struct UpdatePmsResponse{ Head head; int success; // 1为æå ,0为失败 UpdatePmsResponse(){ head.type = UPDATE_PMS_RES; head.len = sizeof(UpdatePmsResponse); } } UpdatePmsResponse ; //设å¤ç®¡ç //æ·»å è®¾å¤ struct ADReq { Head head; char Device_Name[32]; ADReq() { head.type = AD_Req; head.len = sizeof(AD_Req); } }; struct ADPermission { char Device_Name[32]; char Device_Status[32]; char Manufacturer[100]; char Devices_Type[32]; double Longitude; double Latitude; }; struct ADRes { Head head; char Device_Name[32]; char Device_Status[32]; char Start_Time[32]; char Work_Time[32]; char Manufacturer[100]; char Devices_Type[32]; double Longitude; double Latitude; ADPermission per; ADRes() { head.type = AD_Res; head.len = sizeof(ADRes); } }; //å ³éè®¾å¤ struct CDReq { Head head; char Device_Name[32]; CDReq() { head.type = CD_Req; head.len = sizeof(CDReq); } }; struct CDPermission { char Device_Name[32]; char Device_Status[32]; char Start_Time[32]; char Work_Time[32]; char Manufacturer[100]; char Devices_Type[32]; double Longitude; double Latitude; }; struct CDRes { Head head; char Device_Status[32]; int status; CDPermission per; CDRes() { head.type = CD_Res; head.len = sizeof(CDRes); } }; //æåè®¾å¤ struct PDReq { Head head; char Device_Name[32]; PDReq() { head.type = PD_Req; head.len = sizeof(PDReq); } }; struct PDPermission { char Device_Name[32]; char Device_Status[32]; char Start_Time[32]; char Work_Time[32]; char Manufacturer[100]; char Devices_Type[32]; double Longitude; double Latitude; }; struct PDRes { Head head; char Device_Status[32]; char Work_Time[32]; int status; PDPermission per; PDRes() { head.type = PD_Res; head.len = sizeof(PDRes); } }; //å°å¾æ 注 struct MapMarkReq { Head head; int marktype;//æå ¥ãå é¤ãå è½½ MaskInfo msg[0];//ææ§æ°ç» MapMarkReq(){ head.type = MAPMARK_REQ; head.len = sizeof(MapMarkReq); } }; //å°å¾ååºï¼ struct MarkInfo { int markId;//æ æ³¨ç¹id double latitude;//纬度 double longitude;//ç»åº¦ int deviceId;//设å¤ID int deviceStatus;//设å¤ç¶æ char deviceName[32];//设å¤åç§° }; struct MapMarkRes { Head head; int markType;//æå ¥è¿æ¯å é¤ int status; // æä½ç¶æ_æå/失败 MaskInfo info[0];//ææ§æ°ç» MapMarkRes() { head.type = MAPMARK_RES; head.len = sizeof(MapMarkRes); }; }; //大屿¾ç¤º //ç¯å¢æ°æ®è¯·æ± struct EnvironmentReq { Head head; float temp;//温度 float humidity;//湿度 float oxygen;//æ°§æ°æµåº¦ float carbon;//䏿°§å碳æµåº¦ EnvironmentReq(){ head.type = ENVIRONMENT_REQ; head.len = sizeof(EnvironmentReq); } }; //设å¤ç¶æè¯·æ± struct DeviceStatusReq { Head head; int device_ID;//设å¤ç¼å· char device_Name[32];//设å¤åç§° char device_Status[32];//设å¤ç¶æ DeviceStatusReq(){ head.type = DEVICESTATUS_REQ; head.len = sizeof(DeviceStatusReq); } }; //æä½æ¥å¿è¯·æ± struct MovementRecordReq { Head head; char user_Name;//æä½ç¨æ·å char operate_Time[32];//æä½æ¶é´ char device_Name[32];//æä½è®¾å¤ char movement[256];//æä½æè¿° MovementRecordReq(){ head.type = MOVEMENTRECORD_REQ; head.len = sizeof(MovementRecordReq); } }; //è¦æ¥è®°å½è¯·æ± struct AlarmRecordReq { Head head; char alarm_Time[32];//è¦æ¥æ¶é´ char alarm_type[32];//è§£å³æ¶é´ char alarm_Content[256];//è¦æ¥å 容 AlarmRecordReq(){ head.type = ALARMRECORD_REQ; head.len = sizeof(AlarmRecordReq); } }; //ç ¤ç¿äº§éè¯·æ± struct YieldReq { Head head; int month;//æä»½ int yield;//产é YieldReq(){ head.type = YIELD_REQ; head.len = sizeof(YieldReq); } }; //è¦æ¥ç®¡ç // è¦æ¥è¯·æ±ç»æä½ struct WarningReq { Head head; float oxygen; // æ°§æ°æµåº¦ float carbon; // 䏿°§å碳æµåº¦ float temp; // 温度 float humidity; // 湿度 WarningReq() { head.type = WARNING_REQ; head.len = sizeof(WarningReq); } }; // è¦æ¥ååºç»æä½ 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 AddProductionPlanReq { Head head; int type; char productionDate[32]; int productionQuantity; int plannedProductionQuantity; int predictedProductionQuantity; char logText[256]; AddProductionPlanReq() { head.type = ADD_PRODUCTION_PLAN_REQ; head.len = sizeof(AddProductionPlanReq); } }; //æ·»å ä¸è¡æ°æ®çååºç»æä½ struct AddProductionPlanRes { Head head; int type; int status; // å¯ä»¥è¡¨ç¤ºæ·»å æ¯å¦æåï¼ 0 表示失败ï¼1 表示æå AddProductionPlanRes() { head.type = ADD_PRODUCTION_PLAN_RES; head.len = sizeof(AddProductionPlanRes); } }; // æ´æ°ç产计åï¼è®¡åç产éï¼ç请æ±ç»æä½ struct UpdateProductionPlanQuantityReq { Head head; int type; int plannedProductionQuantity; char productionDate[32]; UpdateProductionPlanQuantityReq() { head.type = UPDATE_PRODUCTION_PLAN_QUANTITY_REQ; head.len = sizeof(UpdateProductionPlanQuantityReq); } }; // æ´æ°ç产计åï¼è®¡åç产éï¼çååºç»æä½ struct UpdateProductionPlanQuantityRes { Head head; int type; int status; // å¯ä»¥è¡¨ç¤ºæ´æ°æ¯å¦æåï¼ä¾å¦ 0 表示失败ï¼1 表示æå UpdateProductionPlanQuantityRes() { head.type = UPDATE_PRODUCTION_PLAN_QUANTITY_RES; head.len = sizeof(UpdateProductionPlanQuantityRes); } }; // æ´æ°ç产计åï¼æ¥å¿ï¼ç请æ±ç»æä½ struct UpdateProductionPlanLogReq { Head head; int type; char logText[256]; char productionDate[32]; UpdateProductionPlanLogReq() { head.type = UPDATE_PRODUCTION_PLAN_LOG_REQ; head.len = sizeof(UpdateProductionPlanLogReq); } }; // æ´æ°ç产计å请æ±ï¼æ¥å¿ï¼çååºç»æä½ struct UpdateProductionPlanLogRes { Head head; int type; int status; // å¯ä»¥è¡¨ç¤ºæ´æ°æ¯å¦æåï¼ä¾å¦ 0 表示失败ï¼1 表示æå UpdateProductionPlanLogRes() { head.type = UPDATE_PRODUCTION_PLAN_LOG_RES; head.len = sizeof(UpdateProductionPlanLogRes); } }; // æ¥è¯¢ç产计åä¿¡æ¯è¯·æ± struct ProductionPlanReq { Head head; int type; int len; char productionDate[32]; int productionQuantity; int plannedProductionQuantity; int predictedProductionQuantity; char logText[256]; ProductionPlanReq() { head.type = PRODUCTION_PLAN_REQ; head.len = sizeof(ProductionPlanReq); } }; // æ¥è¯¢ç产计åä¿¡æ¯çååºç»æä½ struct ProductionPlanRes { Head head; int type; int len; int productionQuantity; int plannedProductionQuantity; int predictedProductionQuantity; int roleId; char productionDate[32]; char logText[256]; ProductionPlanRes() { head.type = PRODUCTION_PLAN_REQ; head.len = sizeof(ProductionPlanRes); } }; //æ¥è¯¢è¿ååæ¡ç请æ±ç»æä½ struct RecentFourteenProductionPlansReq { Head head; int requestType; RecentFourteenProductionPlansReq() { head.type = RECENTFOURTEENPRODUCTIONPLANS_REQ; head.len = sizeof(RecentFourteenProductionPlansReq); } }; //æ¥è¯¢è¿ååæ¡çååºç»æä½ struct RecentFourteenProductionPlansRes { Head head; int responseType; int responseLength; int productionQuantities[14]; int plannedProductionQuantities[14]; int predictedProductionQuantities[14]; int roleIds[14]; char productionDates[14][32]; char logTexts[14][256]; RecentFourteenProductionPlansRes() { head.type = UPDATE_PRODUCTION_PLAN_QUANTITY_REQ; head.len = sizeof(RecentFourteenProductionPlansRes); } }; //å岿¥è¯¢åæ // å岿¥è¯¢è¯·æ±ç»æä½ struct HistoryQueryReq { Head head; //æ ¹æ®æ¶é´èå´æ¥è¯¢ char start_time[32]; char end_time[32]; HistoryQueryReq() { // åå§åæ°æ®å¤´ head.type = HISTORY_QUERY_REQ; head.len = sizeof(HistoryQueryReq); // åå§åæ¥è¯¢æ¡ä»¶å段 std::memset(start_time, 0, sizeof(start_time)); std::memset(end_time, 0, sizeof(end_time)); } }; // ç³»ç»è¿è¡ç¶æè¡¨ç¸å ³ä¿¡æ¯ struct Histroy_Info{ int sysId; // 对åºç³»ç»è¿è¡ç¶æè¡¨çè®°å½ç¼å· char sysDataCollectionTime[50]; // æ°æ®ééæ¶é´ char sysDeviceType[50]; // 设å¤ç±»å char sysDeviceId[50]; // 设å¤ç¼å· char sysDeviceStatus[50]; // 设å¤ç¶æ char sysSystemStatus[50]; // ç³»ç»æ´ä½è¿è¡ç¶ææè¿° int devId; // 对åºè®¾å¤è¯¦ç»ä¿¡æ¯è¡¨çè®°å½ç¼å· char devDeviceType[50]; // 设å¤ç±»åï¼ä¸ç³»ç»è¿è¡ç¶æè¡¨ä¸ç设å¤ç±»å对åºï¼å¯ç¨äºå ³èï¼ char devDeviceId[50]; // 设å¤ç¼å·ï¼ä¸ç³»ç»è¿è¡ç¶æè¡¨ä¸ç设å¤ç¼å·å¯¹åºï¼å¯ç¨äºå ³èï¼ char devModel[50]; // 设å¤åå· char runDeviceStatus[50]; // 设å¤ç¶æ char runFaultAlarmTime[50]; // æ éæ¥è¦æ¶é´ char runFaultDescription[50]; // æ éè¯¦ç»æè¿° int safetyId; // 对åºè®¾å¤å®å ¨ç¶æè¡¨çè®°å½ç¼å· char safetyDataCollectionTime[50]; // æ°æ®ééæ¶é´ï¼å¯ç¨äºå ³èä¸å表å¨å䏿¶é´ç¹çæ°æ®æ åµï¼ char safetyDeviceType[50]; // 设å¤ç±»åï¼ç¨äºå ³èï¼ char safetyDeviceId[50]; // 设å¤ç¼å·ï¼ç¨äºå ³èï¼ char safetyStatus[50]; // 设å¤å®å ¨ç¶æ char safetyParameter[50]; // å®å ¨åæ° }; // å岿¥è¯¢ååºç»æä½ // å®å ¨ç¶æè¡¨ç¸å ³ä¿¡æ¯ struct HistoryQueryRes { Head head; Histroy_Info sys[0]; HistoryQueryRes() { // åå§åæ°æ®å¤´ head.type = HISTORY_QUERY_RES; head.len = sizeof(HistoryQueryRes); } }; //èªå¨å级 struct VersionNumReq // çæ¬å·è¯·æ± { Head head; VersionNumReq() { head.type = VERSIONNUM_REQ; head.len = sizeof(VersionNumReq); } }; struct VersionNumRes // çæ¬å·ååº { Head head; char version_id[64]; // çæ¬å· VersionNumRes() { head.type = VERSIONNUM_RES; head.len = sizeof(VersionNumRes); } }; // æä»¶ä¼ è¾ struct FileInfo { char file_name[256]; long long file_size; 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 file_name[256]; long long file_size; UploadFileRes() { head.type = UPLOAD_FILE_RES; head.len = sizeof(UploadFileRes); } }; // çæ¬ä¿¡æ¯å½å ¥ // è¯·æ± struct VersionInfoEntryReq { Head head; char version_id[64]; // çæ¬å· char version_id_old[64]; // ä¸ä¸ä¸ªçæ¬å· char s_filepath[16][128]; //æå¡å¨æ¾ææ°çæ¬çè·¯å¾ char version_description[256]; //æ´æ°å 容 char version_creattime[32]; // æ´æ°æ¶é´ char filename[16][128]; long long filesize[16]; char c_filepath[16][128]; int fileNum; VersionInfoEntryReq() { head.type = VERSIONINFOENTRY_REQ; head.len = sizeof(VersionInfoEntryReq); } }; // çæ¬ä¿¡æ¯å½å ¥ååº struct VersionInfoEntryRes { Head head; bool state = false; VersionInfoEntryRes() { head.type = VERSIONINFOENTRY_RES; head.len = sizeof(VersionInfoEntryRes); } }; // çæ¬æ´æ°è¯·æ± struct VersionUpdateReq { Head head; char cur_version_id[64]; // çæ¬å· VersionUpdateReq() { head.type = VERSIONUPDATE_REQ; head.len = sizeof(VersionUpdateReq); } }; // çæ¬æ´æ°ååº struct VersionUpdateRes { Head head; bool state = false; char version_id[64]; // çæ¬å· char update_date[32]; // æ´æ°æ¶é´ char version_description[1024]; //æ´æ°æè¿° VersionUpdateRes() { head.type = VERSIONUPDATE_RES; head.len = sizeof(VersionUpdateRes); } }; // çæ¬æ´æ°æä»¶ä¸è½½è¯·æ± struct FileDownloadsReq { Head head; char version_id[64]; // çæ¬å· FileDownloadsReq() { head.type = FILEDOWNLOADS_REQ; head.len = sizeof(FileDownloadsReq); } }; // çæ¬æ´æ°æä»¶ä¸è½½ååº struct FileDownloadsRes { Head head; char version_id[64]; // çæ¬å· char filename[128]; //æä»¶å long long filesize; //æä»¶å¤§å° char c_filepath[128]; //客æ·ç«¯æ¾ææ°çæ¬çæ¬å°è·¯å¾ int fileNum; // æä»¶æ°é long long all_fileSize; // æä»¶æ»å¤§å° char content[0]; FileDownloadsRes() { head.type = FILEDOWNLOADS_RES; head.len = sizeof(FileDownloadsRes); } }; // æ´æ°æä»¶ä¸è½½æåçååº struct DownloadSuccessfullyRes{ Head head; bool state = false; char file_name[256]; long long file_size; DownloadSuccessfullyRes() { head.type = DOWNLOADSUCCESSFULLY_RES; head.len = sizeof(DownloadSuccessfullyRes); } }; //æ¥å¿ struct ParsedLog { char timestamp[64]; // æ¶é´æ³ char device_id[64]; // 设å¤ID char level[16];   // æ¥å¿çº§å« char content[256];  // æ¥å¿å 容 char source[64];   // æ¥æºæ¨¡å char user_id[64];  // ç¨æ·ID }; // æ¥å¿æ¥è¯¢è¯·æ±ç»æä½ struct LogQueryReq { Head head; // æ°æ®å¤´ char keyWords[32]; // åå¨å ³é®åçæ°ç» // æ åæé 彿° LogQueryReq() { head.type = LOGSEARCH_REQ; head.len = sizeof(LogQueryReq); } }; // æ¥å¿æ¥è¯¢ååºç»æä½ struct LogQueryRes { Head head; int status; // ååºç¶æ (å¦ 0 表示æåï¼é 0 表示失败) char errorMessage[256]; // é误信æ¯ï¼å¦ææï¼ // æ åæé 彿° LogQueryRes() { head.type = LOGSEARCH_RES; head.len = sizeof(LogQueryRes); } }; #endif // COMMON_H