feat:增加本地数据服务的对外请求和停止请求接口,并且内部实现了实时请求数据的动态管理
This commit is contained in:
parent
c046668b3e
commit
3e1ef91353
|
|
@ -19,8 +19,8 @@ class MeasurementDataManager : public QObject
|
||||||
public:
|
public:
|
||||||
static MeasurementDataManager* instance();
|
static MeasurementDataManager* instance();
|
||||||
|
|
||||||
void requestData(const QString& dataID, QObject* requester);
|
void requestData(const QStringList& measurements, QObject* requester);
|
||||||
void cancelRequest(const QString& dataID, QObject* requester);
|
void cancelRequest(const QStringList& measurements, QObject* requester);
|
||||||
MeasurementDataPoint getLastestRealtimeData(const QString& dataID);
|
MeasurementDataPoint getLastestRealtimeData(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");
|
||||||
|
|
||||||
|
|
@ -97,7 +97,7 @@ private:
|
||||||
QHash<QString, QSharedPointer<MeasurementData>> m_dataCache;
|
QHash<QString, QSharedPointer<MeasurementData>> m_dataCache;
|
||||||
|
|
||||||
//请求记录
|
//请求记录
|
||||||
QHash<QString, QVector<QObject*>> m_dataRequesetRecord;
|
QHash<QString, QSet<QObject*>> m_dataRequesetRecord;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -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)
|
MeasurementDataPoint MeasurementDataManager::getLastestRealtimeData(const QString& dataID)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue