feat:完成本地数据服务和后端数据服务的状态同步
This commit is contained in:
parent
601040568c
commit
c046668b3e
|
|
@ -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<QString, QSharedPointer<MeasurementData>> m_dataCache;
|
||||
|
||||
//请求记录
|
||||
QHash<QString, QVector<QObject*>> m_dataRequesetRecord;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ public:
|
|||
explicit MeasurementData(const QString& id);
|
||||
|
||||
int insertData(const QVector<MeasurementDataPoint>& newData);
|
||||
QVector<MeasurementDataPoint> getLatestData(int count);
|
||||
QVector<MeasurementDataPoint> getLastestData(int count);
|
||||
QVector<MeasurementDataPoint> getDataInRange(qint64 startTime, qint64 endTime);
|
||||
void cleanupOldData(qint64 cutoffTime);
|
||||
|
||||
|
|
|
|||
|
|
@ -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<MeasurementDataPoint> result = m_dataCache.value(dataID)->getLatestData(1);
|
||||
QVector<MeasurementDataPoint> 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> measurementData;
|
||||
if(m_dataCache.contains(dataID))
|
||||
measurementData = m_dataCache.value(dataID);
|
||||
else
|
||||
{
|
||||
measurementData = QSharedPointer<MeasurementData>::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
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ int MeasurementData::insertData(const QVector<MeasurementDataPoint>& newData)
|
|||
return insertedCount;
|
||||
}
|
||||
|
||||
QVector<MeasurementDataPoint> MeasurementData::getLatestData(int count)
|
||||
QVector<MeasurementDataPoint> MeasurementData::getLastestData(int count)
|
||||
{
|
||||
QVector<MeasurementDataPoint> 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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue