diff --git a/diagramCavas/include/diagramCavas.h b/diagramCavas/include/diagramCavas.h index b342276..0e425a4 100644 --- a/diagramCavas/include/diagramCavas.h +++ b/diagramCavas/include/diagramCavas.h @@ -19,6 +19,7 @@ class MonitorPanel; class CornerMonitorLauncher; class LoadMonitorPageDlg; class DiagramConnectSetting; +class DataAccessor; class DIAGRAM_DESIGNER_PUBLIC DiagramCavas : public QMdiArea { @@ -108,6 +109,7 @@ private: CornerMonitorLauncher* _cornerButton; //简略菜单呼出按钮 LoadMonitorPageDlg* _loadMonitorPageDlg; DiagramConnectSetting* _connectSetting; + DataAccessor* _dataAccessor; }; #endif diff --git a/diagramCavas/include/instance/dataAccessor.h b/diagramCavas/include/instance/dataAccessor.h index adb36b3..7c4ab36 100644 --- a/diagramCavas/include/instance/dataAccessor.h +++ b/diagramCavas/include/instance/dataAccessor.h @@ -4,6 +4,7 @@ /*********中转、处理网络数据*********/ #include #include +#include class DataAccessor : public QObject { @@ -11,8 +12,12 @@ class DataAccessor : public QObject public: DataAccessor(QObject *parent = nullptr); ~DataAccessor(); +public slots: + void onReceiveHttpData(const QString& sType,const QVariant& data); + void onReceiveWebsocketData(const QVariant& data); private: QMap> _realTimeData; + mutable QMutex m_mutex; }; #endif diff --git a/diagramCavas/source/diagramCavas.cpp b/diagramCavas/source/diagramCavas.cpp index aa19d56..bb3ffd0 100644 --- a/diagramCavas/source/diagramCavas.cpp +++ b/diagramCavas/source/diagramCavas.cpp @@ -21,12 +21,15 @@ #include "diagramConnectSetting.h" #include "diagramCommunication/include/communicationManager.h" #include "diagramCommunication/include/configManager.h" +#include "instance/dataAccessor.h" +#include "uiCommunicationBus.h" DiagramCavas::DiagramCavas(QWidget *parent) : QMdiArea(parent) ,_cornerButton(nullptr) ,_loadMonitorPageDlg(nullptr) ,_connectSetting(nullptr) + ,_dataAccessor(nullptr) { _pageIndex = 0; } @@ -94,6 +97,18 @@ void DiagramCavas::initial() // 应用配置 comm->updateHttpConfig(config->getHttpConfig()); comm->updateWebSocketConfig(config->getWebSocketConfig()); + + _dataAccessor = new DataAccessor(this); + connect(UiCommunicationBus::instance(), + SIGNAL(httpDataProcessed(QString,QVariant)), + _dataAccessor, + SLOT(onReceiveHttpData(QString,QVariant)), + Qt::AutoConnection); + connect(UiCommunicationBus::instance(), + SIGNAL(websocketDataProcessed(QVariant)), + _dataAccessor, + SLOT(onReceiveWebsocketData(QVariant)), + Qt::AutoConnection); } void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode,QString parent) diff --git a/diagramCavas/source/instance/dataAccessor.cpp b/diagramCavas/source/instance/dataAccessor.cpp index 1f6585a..4e0b411 100644 --- a/diagramCavas/source/instance/dataAccessor.cpp +++ b/diagramCavas/source/instance/dataAccessor.cpp @@ -1,4 +1,7 @@ #include "instance/dataAccessor.h" +#include +#include +#include DataAccessor::DataAccessor(QObject* parent) : QObject(parent) @@ -10,3 +13,55 @@ DataAccessor::~DataAccessor() { } + +void DataAccessor::onReceiveHttpData(const QString& sType,const QVariant& data) +{ + if(sType == "subscriptions"){ + QJsonObject dataObj = data.toJsonObject(); + QString sClientId = dataObj.value("client_id").toString(); + + QMap lstRequest; + QJsonArray measureArr = dataObj.value("measurements").toArray(); + for(const QJsonValue& value : measureArr){ + QJsonObject obj = value.toObject(); + QString sId = obj["id"].toString(); + QString sCode = obj["code"].toString(); + + if(sId == "1001"){ + if(!lstRequest.contains(sId)){ + lstRequest.insert(sId,sCode); + } + } + } + /*QString input = dataObj.value("input").toString(); + int offSet = dataObj.value("offset").toInt(); + QJsonArray recommendedList = dataObj.value("recommended_list").toArray(); + for(const QJsonValue& value : recommendedList){ + QString content = value.toString(); + }*/ + } +} + +void DataAccessor::onReceiveWebsocketData(const QVariant& data) +{ + QJsonObject dataObj = data.toJsonObject(); + if(dataObj.contains("targets")){ + QJsonArray arrTarget = dataObj.value("targets").toArray(); + for (const QJsonValue& value : arrTarget) { + QJsonObject targetObj = value.toObject(); + QString targetId = targetObj["id"].toString(); + QJsonArray arrData = targetObj["datas"].toArray(); + for (const QJsonValue& data : arrData){ + QJsonObject dataObj = data.toObject(); + QString sTime = dataObj["time"].toString(); + bool ok = false; + quint64 value = sTime.toULongLong(&ok); + if (ok) { + // 使用 value + } + double dVal = dataObj["value"].toDouble(); + } + } + } + QMutexLocker locker(&m_mutex); +} diff --git a/diagramCommunication/CMakeLists.txt.NaNAUP b/diagramCommunication/CMakeLists.txt.NaNAUP new file mode 100644 index 0000000..3c65312 --- /dev/null +++ b/diagramCommunication/CMakeLists.txt.NaNAUP @@ -0,0 +1,58 @@ +project(diagramCommunication) + +set(DIAGRACOMMUNICATION_HEADER_FILES + include/channelConfig.h + include/baseChannel.h + include/communicationManager.h + include/httpChannel.h + include/webSocketChannel.h + include/configManager.h + include/uiCommunicationBus.h + include/dataProcessor.h + ../common/include/compiler.hpp + ../common/include/export.hpp + ../common/include/operatingSystem.hpp +) + +set(DIAGRACOMMUNICATION_SOURCE_FILES + source/communicationManager.cpp + source/baseChannel.cpp + source/webSocketChannel.cpp + source/httpChannel.cpp + source/configManager.cpp + source/uiCommunicationBus.cpp + source/dataProcessor.cpp +) + + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_library(diagramCommunication SHARED + MANUAL_FINALIZATION + ${DIAGRACOMMUNICATION_HEADER_FILES} + ${DIAGRACOMMUNICATION_SOURCE_FILES} + ) +else() + add_library(diagramCommunication SHARED + ${DIAGRACOMMUNICATION_HEADER_FILES} + ${DIAGRACOMMUNICATION_SOURCE_FILES} + ) +endif() + +target_link_libraries(diagramCommunication PUBLIC Qt${QT_VERSION_MAJOR}::Core) +target_link_libraries(diagramCommunication PRIVATE Qt6::Xml) +target_link_libraries(diagramCommunication PRIVATE Qt6::Network) +target_link_libraries(diagramCommunication PRIVATE Qt6::WebSockets) +target_link_libraries(diagramCommunication PRIVATE Qt6::Sql ${PostgreSQL_LIBRARIES}) + +option(BUILD_SHARED_LIBS "Build as shared library" ON) + + +target_include_directories(diagramCommunication PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) + +target_compile_definitions(diagramCommunication + PUBLIC + DIAGRAM_DESIGNER_SHARED + PRIVATE + DIAGRAM_DESIGNER_EXPORTS + #QT_NO_KEYWORDS +) diff --git a/diagramCommunication/CMakeLists.txt.ozECFc b/diagramCommunication/CMakeLists.txt.ozECFc new file mode 100644 index 0000000..3c65312 --- /dev/null +++ b/diagramCommunication/CMakeLists.txt.ozECFc @@ -0,0 +1,58 @@ +project(diagramCommunication) + +set(DIAGRACOMMUNICATION_HEADER_FILES + include/channelConfig.h + include/baseChannel.h + include/communicationManager.h + include/httpChannel.h + include/webSocketChannel.h + include/configManager.h + include/uiCommunicationBus.h + include/dataProcessor.h + ../common/include/compiler.hpp + ../common/include/export.hpp + ../common/include/operatingSystem.hpp +) + +set(DIAGRACOMMUNICATION_SOURCE_FILES + source/communicationManager.cpp + source/baseChannel.cpp + source/webSocketChannel.cpp + source/httpChannel.cpp + source/configManager.cpp + source/uiCommunicationBus.cpp + source/dataProcessor.cpp +) + + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_library(diagramCommunication SHARED + MANUAL_FINALIZATION + ${DIAGRACOMMUNICATION_HEADER_FILES} + ${DIAGRACOMMUNICATION_SOURCE_FILES} + ) +else() + add_library(diagramCommunication SHARED + ${DIAGRACOMMUNICATION_HEADER_FILES} + ${DIAGRACOMMUNICATION_SOURCE_FILES} + ) +endif() + +target_link_libraries(diagramCommunication PUBLIC Qt${QT_VERSION_MAJOR}::Core) +target_link_libraries(diagramCommunication PRIVATE Qt6::Xml) +target_link_libraries(diagramCommunication PRIVATE Qt6::Network) +target_link_libraries(diagramCommunication PRIVATE Qt6::WebSockets) +target_link_libraries(diagramCommunication PRIVATE Qt6::Sql ${PostgreSQL_LIBRARIES}) + +option(BUILD_SHARED_LIBS "Build as shared library" ON) + + +target_include_directories(diagramCommunication PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) + +target_compile_definitions(diagramCommunication + PUBLIC + DIAGRAM_DESIGNER_SHARED + PRIVATE + DIAGRAM_DESIGNER_EXPORTS + #QT_NO_KEYWORDS +) diff --git a/diagramCommunication/include/channelConfig.h b/diagramCommunication/include/channelConfig.h index 2444b5d..96b4618 100644 --- a/diagramCommunication/include/channelConfig.h +++ b/diagramCommunication/include/channelConfig.h @@ -17,6 +17,7 @@ struct DIAGRAM_DESIGNER_PUBLIC ChannelConfig { int timeout = 30000; // 超时时间(ms) bool enabled = true; // 是否启用 bool autoConnect = false; // 是否自动连接 + QVariantMap headers; //头 // 认证 QString username; @@ -27,9 +28,6 @@ struct DIAGRAM_DESIGNER_PUBLIC ChannelConfig { QDateTime lastConnectTime; int errorCount = 0; - // HTTP特有 - QVariantMap headers; // HTTP头 - // WebSocket特有 int heartbeatInterval = 30000; // 心跳间隔 diff --git a/diagramCommunication/include/ConfigManager.h b/diagramCommunication/include/configManager.h similarity index 100% rename from diagramCommunication/include/ConfigManager.h rename to diagramCommunication/include/configManager.h diff --git a/diagramCommunication/source/dataProcessor.cpp b/diagramCommunication/source/dataProcessor.cpp index c40be5d..9153f99 100644 --- a/diagramCommunication/source/dataProcessor.cpp +++ b/diagramCommunication/source/dataProcessor.cpp @@ -60,12 +60,7 @@ void DataProcessor::processJson( const QVariant& data,int conType) }*/ } else if(dataObj.contains("input")){ - /*QString input = dataObj.value("input").toString(); - int offSet = dataObj.value("offset").toInt(); - QJsonArray recommendedList = dataObj.value("recommended_list").toArray(); - for(const QJsonValue& value : recommendedList){ - QString content = value.toString(); - }*/ + } //QMutexLocker locker(&m_mutex); //m_dataCache[dataType] = data; diff --git a/diagramCommunication/source/uiCommunicationBus.cpp b/diagramCommunication/source/uiCommunicationBus.cpp index 101106e..e1e0dcf 100644 --- a/diagramCommunication/source/uiCommunicationBus.cpp +++ b/diagramCommunication/source/uiCommunicationBus.cpp @@ -161,7 +161,7 @@ void UiCommunicationBus::broadcastToUis(const QString& action, const QVariant& d for (auto it = m_uiObjects.begin(); it != m_uiObjects.end(); ++it) { QObject* uiObject = it.value(); - QMetaObject::invokeMethod(uiObject, "onMessage", + QMetaObject::invokeMethod(uiObject, "onReceiveHttpData", Q_ARG(QString, action), Q_ARG(QVariant, data)); }