From c046668b3ed5d0547b8706133dc544a742847d50 Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Thu, 15 Jan 2026 17:04:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=8C=E6=88=90=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9C=8D=E5=8A=A1=E5=92=8C=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9C=8D=E5=8A=A1=E7=9A=84=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/measurementDataManager.h | 19 ++++++++++------ include/measurementDataUtils.h | 2 +- source/measurementDataManager.cpp | 36 +++++++++++++++++++++++-------- source/measurementDataUtils.cpp | 4 ++-- 4 files changed, 43 insertions(+), 18 deletions(-) diff --git a/include/measurementDataManager.h b/include/measurementDataManager.h index 9bf6af7..e871633 100644 --- a/include/measurementDataManager.h +++ b/include/measurementDataManager.h @@ -19,11 +19,9 @@ class MeasurementDataManager : public QObject public: static MeasurementDataManager* instance(); - void startSubscription(const QStringList& measurements); - void stopSubscription(); - void addSubscriptionData(const QStringList& measurements); - void removeSubscriptionData(const QStringList& measurements); - MeasurementDataPoint getLatestRealtimeData(const QString& dataID); + void requestData(const QString& dataID, QObject* requester); + void cancelRequest(const QString& dataID, QObject* requester); + MeasurementDataPoint getLastestRealtimeData(const QString& dataID); void queryHistoricalEvents(const QString& dataID, const QDateTime& startTime, const QDateTime& endTime, const QString& step, const QString& type = "phasor"); private slots: @@ -72,11 +70,17 @@ private: ~MeasurementDataManager(); void initialize(); + //实时数据 void buildSubscriptionRequest(const QString& action, const QStringList& measurements); + void startSubscription(const QStringList& measurements); + void stopSubscription(); + void addSubscriptionData(const QStringList& measurements); + void removeSubscriptionData(const QStringList& measurements); void processSubscriptionResponse(const QString& action, QNetworkReply* reply); + void getSubscriptionRealtimeData(); + //历史数据 QUrl buildHistoricalQueryUrl(const QString& dataID,const QDateTime& startTime, const QDateTime& endTime, const QString& step, const QString& type); void processHistoricalResponse(const QString& dataID, const QByteArray& data); - void getSubscriptionRealtimeData(); //配置相关 ServiceConfig m_serviceConfig; @@ -91,6 +95,9 @@ private: //数据缓存 QHash> m_dataCache; + + //请求记录 + QHash> m_dataRequesetRecord; }; #endif diff --git a/include/measurementDataUtils.h b/include/measurementDataUtils.h index 2531a63..4c4e1d6 100644 --- a/include/measurementDataUtils.h +++ b/include/measurementDataUtils.h @@ -43,7 +43,7 @@ public: explicit MeasurementData(const QString& id); int insertData(const QVector& newData); - QVector getLatestData(int count); + QVector getLastestData(int count); QVector getDataInRange(qint64 startTime, qint64 endTime); void cleanupOldData(qint64 cutoffTime); diff --git a/source/measurementDataManager.cpp b/source/measurementDataManager.cpp index fc22b0c..3ade247 100644 --- a/source/measurementDataManager.cpp +++ b/source/measurementDataManager.cpp @@ -79,7 +79,7 @@ void MeasurementDataManager::buildSubscriptionRequest(const QString& action, con for(const QString& meaurement : measurements) targetsArray.append(meaurement); QJsonObject measurementObj; - measurementObj.insert("interval", "20ms"); + measurementObj.insert("interval", "500ms"); measurementObj.insert("targets", targetsArray); QJsonArray measurementArray; measurementArray.append(measurementObj); @@ -112,7 +112,10 @@ void MeasurementDataManager::startSubscription(const QStringList& measurements) void MeasurementDataManager::addSubscriptionData(const QStringList& measurements) { if(m_clientID.isEmpty()) + { + buildSubscriptionRequest("start", measurements); return; + } buildSubscriptionRequest("add", measurements); } @@ -127,7 +130,8 @@ void MeasurementDataManager::removeSubscriptionData(const QStringList& measureme void MeasurementDataManager::stopSubscription() { - //暂时不需要,m_webSocketClient析构的时候会断开链接xigous + m_webSocketClient->disconnectFromServer(); + m_clientID.clear(); } void MeasurementDataManager::processSubscriptionResponse(const QString& action, QNetworkReply* reply) @@ -294,12 +298,20 @@ void MeasurementDataManager::getSubscriptionRealtimeData() } } -MeasurementDataPoint MeasurementDataManager::getLatestRealtimeData(const QString& dataID) +void MeasurementDataManager::requestData(const QString& dataID, QObject* requester) +{ + //if() +} + +void MeasurementDataManager::cancelRequest(const QString& dataID, QObject* requester) +{} + +MeasurementDataPoint MeasurementDataManager::getLastestRealtimeData(const QString& dataID) { if(!m_dataCache.contains(dataID)) return MeasurementDataPoint(); - QVector result = m_dataCache.value(dataID)->getLatestData(1); + QVector result = m_dataCache.value(dataID)->getLastestData(1); if(result.size() > 0) return result.at(0); else @@ -329,8 +341,9 @@ void MeasurementDataManager::onReceiveRealtimeData(const QString& dataMsg) if(parseError.error == QJsonParseError::NoError && doc.isObject()) { QJsonObject docObj = doc.object(); - QString msg = docObj.value("msg").toString(); - if(msg == "success") + int code = docObj.value("code").toInt(); + //QString msg = docObj.value("msg").toString(); + if(code == 200) { QJsonValue payloadValue = docObj.value("payload"); if(payloadValue.isObject()) @@ -350,6 +363,11 @@ void MeasurementDataManager::onReceiveRealtimeData(const QString& dataMsg) QSharedPointer measurementData; if(m_dataCache.contains(dataID)) measurementData = m_dataCache.value(dataID); + else + { + measurementData = QSharedPointer::create(dataID); + m_dataCache.insert(dataID, measurementData); + } QJsonValue datasValue = targetObj.value("datas"); if(datasValue.isArray()) @@ -379,10 +397,10 @@ void MeasurementDataManager::onReceiveRealtimeData(const QString& dataMsg) LOG_ERROR("WebSockt-MeasurementData", errorMsg); } } - else + else if(code == 2101) //服务端协程断开,此链接已无效 { - QString errorMsg = QString("Realtime measurementData get error: %1").arg(parseError.errorString()); - LOG_ERROR("WebSockt-MeasurementData", errorMsg); + m_webSocketClient->disconnectFromServer(); + m_clientID.clear(); } } else diff --git a/source/measurementDataUtils.cpp b/source/measurementDataUtils.cpp index 81dbd07..bc2bd8e 100644 --- a/source/measurementDataUtils.cpp +++ b/source/measurementDataUtils.cpp @@ -27,7 +27,7 @@ int MeasurementData::insertData(const QVector& newData) return insertedCount; } -QVector MeasurementData::getLatestData(int count) +QVector MeasurementData::getLastestData(int count) { QVector result; @@ -132,7 +132,7 @@ void WebSocketClient::setMaxReconnectAttempts(int maxAttempts) void WebSocketClient::setupWebSocket() { - cleanupWebSocket(); + //cleanupWebSocket(); m_webSocket = new QWebSocket(); connect(m_webSocket, &QWebSocket::connected, this, &WebSocketClient::onConnected);