feat:增加本地数据服务的对外请求和停止请求接口,并且内部实现了实时请求数据的动态管理

This commit is contained in:
duanshengchao 2026-01-16 16:00:30 +08:00
parent c046668b3e
commit 3e1ef91353
2 changed files with 45 additions and 7 deletions

View File

@ -19,8 +19,8 @@ class MeasurementDataManager : public QObject
public:
static MeasurementDataManager* instance();
void requestData(const QString& dataID, QObject* requester);
void cancelRequest(const QString& dataID, QObject* requester);
void requestData(const QStringList& measurements, QObject* requester);
void cancelRequest(const QStringList& measurements, 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");
@ -97,7 +97,7 @@ private:
QHash<QString, QSharedPointer<MeasurementData>> m_dataCache;
//请求记录
QHash<QString, QVector<QObject*>> m_dataRequesetRecord;
QHash<QString, QSet<QObject*>> m_dataRequesetRecord;
};
#endif

View File

@ -298,13 +298,51 @@ void MeasurementDataManager::getSubscriptionRealtimeData()
}
}
void MeasurementDataManager::requestData(const QString& dataID, QObject* requester)
void MeasurementDataManager::requestData(const QStringList& measurements, QObject* requester)
{
//if()
QStringList newRequestDatas;
for(const QString& dataID : measurements)
{
auto it = m_dataRequesetRecord.find(dataID);
if(it != m_dataRequesetRecord.end() && !it.value().contains(requester))
it.value().insert(requester);
else
{
QSet<QObject*> requesters;
requesters.insert(requester);
m_dataRequesetRecord.insert(dataID, requesters);
newRequestDatas.push_back(dataID);
}
}
if(!newRequestDatas.isEmpty())
addSubscriptionData(newRequestDatas);
}
void MeasurementDataManager::cancelRequest(const QString& dataID, QObject* requester)
{}
void MeasurementDataManager::cancelRequest(const QStringList& measurements, QObject* requester)
{
QStringList removeRequestDatas;
for(const QString& dataID : measurements)
{
auto it = m_dataRequesetRecord.find(dataID);
if(it != m_dataRequesetRecord.end())
{
it.value().remove(requester);
if(it.value().isEmpty())
removeRequestDatas.push_back(dataID);
}
}
if(!removeRequestDatas.isEmpty())
{
removeSubscriptionData(removeRequestDatas);
for(const QString& dataID : std::as_const(removeRequestDatas))
{
m_dataRequesetRecord.remove(dataID);
m_dataCache.remove(dataID);
}
}
}
MeasurementDataPoint MeasurementDataManager::getLastestRealtimeData(const QString& dataID)
{