feat:完成本地数据服务和后端数据服务的状态同步
This commit is contained in:
parent
601040568c
commit
c046668b3e
|
|
@ -19,11 +19,9 @@ class MeasurementDataManager : public QObject
|
||||||
public:
|
public:
|
||||||
static MeasurementDataManager* instance();
|
static MeasurementDataManager* instance();
|
||||||
|
|
||||||
void startSubscription(const QStringList& measurements);
|
void requestData(const QString& dataID, QObject* requester);
|
||||||
void stopSubscription();
|
void cancelRequest(const QString& dataID, QObject* requester);
|
||||||
void addSubscriptionData(const QStringList& measurements);
|
MeasurementDataPoint getLastestRealtimeData(const QString& dataID);
|
||||||
void removeSubscriptionData(const QStringList& measurements);
|
|
||||||
MeasurementDataPoint getLatestRealtimeData(const QString& dataID);
|
|
||||||
void queryHistoricalEvents(const QString& dataID, const QDateTime& startTime, const QDateTime& endTime, const QString& step, const QString& type = "phasor");
|
void queryHistoricalEvents(const QString& dataID, const QDateTime& startTime, const QDateTime& endTime, const QString& step, const QString& type = "phasor");
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
@ -72,11 +70,17 @@ private:
|
||||||
~MeasurementDataManager();
|
~MeasurementDataManager();
|
||||||
|
|
||||||
void initialize();
|
void initialize();
|
||||||
|
//实时数据
|
||||||
void buildSubscriptionRequest(const QString& action, const QStringList& measurements);
|
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 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);
|
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 processHistoricalResponse(const QString& dataID, const QByteArray& data);
|
||||||
void getSubscriptionRealtimeData();
|
|
||||||
|
|
||||||
//配置相关
|
//配置相关
|
||||||
ServiceConfig m_serviceConfig;
|
ServiceConfig m_serviceConfig;
|
||||||
|
|
@ -91,6 +95,9 @@ private:
|
||||||
|
|
||||||
//数据缓存
|
//数据缓存
|
||||||
QHash<QString, QSharedPointer<MeasurementData>> m_dataCache;
|
QHash<QString, QSharedPointer<MeasurementData>> m_dataCache;
|
||||||
|
|
||||||
|
//请求记录
|
||||||
|
QHash<QString, QVector<QObject*>> m_dataRequesetRecord;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ public:
|
||||||
explicit MeasurementData(const QString& id);
|
explicit MeasurementData(const QString& id);
|
||||||
|
|
||||||
int insertData(const QVector<MeasurementDataPoint>& newData);
|
int insertData(const QVector<MeasurementDataPoint>& newData);
|
||||||
QVector<MeasurementDataPoint> getLatestData(int count);
|
QVector<MeasurementDataPoint> getLastestData(int count);
|
||||||
QVector<MeasurementDataPoint> getDataInRange(qint64 startTime, qint64 endTime);
|
QVector<MeasurementDataPoint> getDataInRange(qint64 startTime, qint64 endTime);
|
||||||
void cleanupOldData(qint64 cutoffTime);
|
void cleanupOldData(qint64 cutoffTime);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@ void MeasurementDataManager::buildSubscriptionRequest(const QString& action, con
|
||||||
for(const QString& meaurement : measurements)
|
for(const QString& meaurement : measurements)
|
||||||
targetsArray.append(meaurement);
|
targetsArray.append(meaurement);
|
||||||
QJsonObject measurementObj;
|
QJsonObject measurementObj;
|
||||||
measurementObj.insert("interval", "20ms");
|
measurementObj.insert("interval", "500ms");
|
||||||
measurementObj.insert("targets", targetsArray);
|
measurementObj.insert("targets", targetsArray);
|
||||||
QJsonArray measurementArray;
|
QJsonArray measurementArray;
|
||||||
measurementArray.append(measurementObj);
|
measurementArray.append(measurementObj);
|
||||||
|
|
@ -112,7 +112,10 @@ void MeasurementDataManager::startSubscription(const QStringList& measurements)
|
||||||
void MeasurementDataManager::addSubscriptionData(const QStringList& measurements)
|
void MeasurementDataManager::addSubscriptionData(const QStringList& measurements)
|
||||||
{
|
{
|
||||||
if(m_clientID.isEmpty())
|
if(m_clientID.isEmpty())
|
||||||
|
{
|
||||||
|
buildSubscriptionRequest("start", measurements);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
buildSubscriptionRequest("add", measurements);
|
buildSubscriptionRequest("add", measurements);
|
||||||
}
|
}
|
||||||
|
|
@ -127,7 +130,8 @@ void MeasurementDataManager::removeSubscriptionData(const QStringList& measureme
|
||||||
|
|
||||||
void MeasurementDataManager::stopSubscription()
|
void MeasurementDataManager::stopSubscription()
|
||||||
{
|
{
|
||||||
//暂时不需要,m_webSocketClient析构的时候会断开链接xigous
|
m_webSocketClient->disconnectFromServer();
|
||||||
|
m_clientID.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MeasurementDataManager::processSubscriptionResponse(const QString& action, QNetworkReply* reply)
|
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))
|
if(!m_dataCache.contains(dataID))
|
||||||
return MeasurementDataPoint();
|
return MeasurementDataPoint();
|
||||||
|
|
||||||
QVector<MeasurementDataPoint> result = m_dataCache.value(dataID)->getLatestData(1);
|
QVector<MeasurementDataPoint> result = m_dataCache.value(dataID)->getLastestData(1);
|
||||||
if(result.size() > 0)
|
if(result.size() > 0)
|
||||||
return result.at(0);
|
return result.at(0);
|
||||||
else
|
else
|
||||||
|
|
@ -329,8 +341,9 @@ void MeasurementDataManager::onReceiveRealtimeData(const QString& dataMsg)
|
||||||
if(parseError.error == QJsonParseError::NoError && doc.isObject())
|
if(parseError.error == QJsonParseError::NoError && doc.isObject())
|
||||||
{
|
{
|
||||||
QJsonObject docObj = doc.object();
|
QJsonObject docObj = doc.object();
|
||||||
QString msg = docObj.value("msg").toString();
|
int code = docObj.value("code").toInt();
|
||||||
if(msg == "success")
|
//QString msg = docObj.value("msg").toString();
|
||||||
|
if(code == 200)
|
||||||
{
|
{
|
||||||
QJsonValue payloadValue = docObj.value("payload");
|
QJsonValue payloadValue = docObj.value("payload");
|
||||||
if(payloadValue.isObject())
|
if(payloadValue.isObject())
|
||||||
|
|
@ -350,6 +363,11 @@ void MeasurementDataManager::onReceiveRealtimeData(const QString& dataMsg)
|
||||||
QSharedPointer<MeasurementData> measurementData;
|
QSharedPointer<MeasurementData> measurementData;
|
||||||
if(m_dataCache.contains(dataID))
|
if(m_dataCache.contains(dataID))
|
||||||
measurementData = m_dataCache.value(dataID);
|
measurementData = m_dataCache.value(dataID);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
measurementData = QSharedPointer<MeasurementData>::create(dataID);
|
||||||
|
m_dataCache.insert(dataID, measurementData);
|
||||||
|
}
|
||||||
|
|
||||||
QJsonValue datasValue = targetObj.value("datas");
|
QJsonValue datasValue = targetObj.value("datas");
|
||||||
if(datasValue.isArray())
|
if(datasValue.isArray())
|
||||||
|
|
@ -379,10 +397,10 @@ void MeasurementDataManager::onReceiveRealtimeData(const QString& dataMsg)
|
||||||
LOG_ERROR("WebSockt-MeasurementData", errorMsg);
|
LOG_ERROR("WebSockt-MeasurementData", errorMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if(code == 2101) //服务端协程断开,此链接已无效
|
||||||
{
|
{
|
||||||
QString errorMsg = QString("Realtime measurementData get error: %1").arg(parseError.errorString());
|
m_webSocketClient->disconnectFromServer();
|
||||||
LOG_ERROR("WebSockt-MeasurementData", errorMsg);
|
m_clientID.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ int MeasurementData::insertData(const QVector<MeasurementDataPoint>& newData)
|
||||||
return insertedCount;
|
return insertedCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<MeasurementDataPoint> MeasurementData::getLatestData(int count)
|
QVector<MeasurementDataPoint> MeasurementData::getLastestData(int count)
|
||||||
{
|
{
|
||||||
QVector<MeasurementDataPoint> result;
|
QVector<MeasurementDataPoint> result;
|
||||||
|
|
||||||
|
|
@ -132,7 +132,7 @@ void WebSocketClient::setMaxReconnectAttempts(int maxAttempts)
|
||||||
|
|
||||||
void WebSocketClient::setupWebSocket()
|
void WebSocketClient::setupWebSocket()
|
||||||
{
|
{
|
||||||
cleanupWebSocket();
|
//cleanupWebSocket();
|
||||||
|
|
||||||
m_webSocket = new QWebSocket();
|
m_webSocket = new QWebSocket();
|
||||||
connect(m_webSocket, &QWebSocket::connected, this, &WebSocketClient::onConnected);
|
connect(m_webSocket, &QWebSocket::connected, this, &WebSocketClient::onConnected);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue