PowerMaster/include/measurementDataManager.h

97 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef MEASUREMENTDATAMANAGER_H
#define MEASUREMENTDATAMANAGER_H
#include "measurementDataUtils.h"
#include <QObject>
#include <QHash>
#include <QUrl>
class QSettings;
class QNetworkAccessManager;
class QNetworkReply;
class WebSocketClient;
class MeasurementDataManager : public QObject
{
Q_OBJECT
Q_DISABLE_COPY(MeasurementDataManager) //DataManager(const DataManager&) = delete; DataManager& operator=(const DataManager&) = delete;
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 queryHistoricalEvents(const QString& dataID, const QDateTime& startTime, const QDateTime& endTime, const QString& step, const QString& type = "phasor");
private slots:
void onReceiveRealtimeData(const QString& dataMsg);
void onHistoricalRequestFinished(const QString& dataID, QNetworkReply* reply);
private:
struct RealtimeConfig
{
QString host;
int port;
QString httpPath;
QString websocketPath;
int timeout; //请求超时(毫秒)
int maxRetries; //最大重试次数
int retryInterval; //重试间隔
RealtimeConfig()
: timeout(3000)
, maxRetries(3)
, retryInterval(1000)
{}
};
struct HistoricalConfig
{
QUrl baseUrl;
int timeout; //请求超时(毫秒)
int maxRetries; //最大重试次数
int retryInterval; //重试间隔
HistoricalConfig()
: timeout(3000)
, maxRetries(3)
, retryInterval(1000)
{}
};
struct ServiceConfig
{
RealtimeConfig realtimeCfg;
HistoricalConfig historicalCfg;
};
explicit MeasurementDataManager();
~MeasurementDataManager();
void initialize();
void buildSubscriptionRequest(const QString& action, const QStringList& measurements);
void processSubscriptionResponse(const QString& action, QNetworkReply* reply);
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;
QSettings* m_settings;
QString m_settingsFile;
bool m_isVaildSettingsFile;
//服务相关
QString m_clientID;
QNetworkAccessManager* m_networkManager;
WebSocketClient* m_webSocketClient;
//数据缓存
QHash<QString, QSharedPointer<MeasurementData>> m_dataCache;
};
#endif