#ifndef BELTTEARINGPRESENTER_H #define BELTTEARINGPRESENTER_H #include "IVrBeltTearingConfig.h" #include "IVrTCPClient.h" #include "IStatusUpdate.h" #include #include #include #include #include class BeltTearingPresenter : public QWidget, public IVrBeltTearingConfigChangeNotify { Q_OBJECT signals: void tearingDataReceived(const QJsonObject &data); void serverDataReceived(const QString &serverName, const QJsonObject &data); void tcpDataReceivedAsync(const QString &aliasName, const QByteArray &data); void configUpdated(); // 配置更新信号 public: explicit BeltTearingPresenter(QWidget* parent = nullptr); ~BeltTearingPresenter(); void Init(); // 状态更新接口 QStringList getServerNames() {return m_serverInfos.keys();} QString getServerIp(const QString &serverName) const ; quint16 getServerPort(const QString &serverName) const ; QString getServerDisplayName(const QString &serverName) const ; // 设置状态更新接口 void setStatusUpdate(IStatusUpdate* statusUpdate) { m_statusUpdate = statusUpdate; } // 获取服务器信息和配置接口 QMap getServerInfos() const { return m_serverInfos; } IVrBeltTearingConfig* getBeltTearingConfig() const { return m_config; } // 发送参数到服务器 bool sendParametersToServer(const ByteDataType dataType, const QString& serverName, const QByteArray& paramData); // 处理服务器信息响应 void handleServerInfoResponse(const QString& serverName, const QJsonObject& responseObj); // 重新检测方法 void ResetDetect(const QString& targetServerAlias); // IVrBeltTearingConfigChangeNotify 接口实现 void OnConfigChanged(const BeltTearingConfigResult& configResult) override; private: // IBeltTearingPresenter interface implementation bool initializeConfig(const QString &configPath); bool connectToServer(const ServerInfo &serverInfo, const QString &aliasName); void disconnectFromServer(const QString &aliasName = QString()) ; bool isConnected(const QString &aliasName = QString()) const ; bool sendData(const QByteArray &data, const QString &aliasName = QString()); private slots: void onConnected(const QString &serverName); void onDisconnected(const QString &serverName); void onTcpError(const QString &serverName, const QString &error); void onTcpDataReceivedAsync(const QString &aliasName, const QByteArray &data); private: // 静态回调函数(用于C接口)- 已弃用,使用lambda替代 // static void tcpDataReceivedCallback(const char* pData, const int nLen); // static void tcpLinkStatusCallback(bool connected); // 实例方法 void handleTcpDataReceived(const QString &aliasName, const char* pData, const int nLen); void handleTcpLinkStatus(const QString &aliasName, bool connected); private: IVrBeltTearingConfig * m_config = nullptr; // 配置接口 IStatusUpdate* m_statusUpdate = nullptr; // 状态更新接口 QMap m_tcpClients; // 服务器名称 -> TCP客户端映射 QMap m_serverInfos; // 服务器名称 -> 服务器信息映射 QMap m_connectionStatus; // 连接状态 QMap m_workThreadStarted; // 工作线程启动状态 QMap m_dataBuffers; // 每个服务器的数据缓存 // 处理完整数据包的方法 void processCompletePacket(const QString &serverName, const QByteArray &completeData); }; #endif // BELTTEARINGPRESENTER_H