#ifndef BELTTEARINGPRESENTER_H #define BELTTEARINGPRESENTER_H #include "IVrBeltTearingConfig.h" #include "VrTcpClient.h" #include #include #include "widgets/DeviceStatusWidget.h" enum class ByteDataType { Text = 0x01, Image = 0x02 }; class BeltTearingPresenter : public QWidget { Q_OBJECT signals: void tearingDataReceived(const QJsonObject &data); public: explicit BeltTearingPresenter(QWidget* parent = nullptr); ~BeltTearingPresenter(); void Init(); QStringList getServerNames() const; QString getServerIp(const QString &serverName) const ; quint16 getServerPort(const QString &serverName) const ; QString getServerDisplayName(const QString &serverName) const ; // 设置设备状态控件 void setDeviceStatusWidget(DeviceStatusWidget* widget) { m_deviceStatusWidget = widget; } // 设置状态更新接口 void setStatusUpdate(IStatusUpdate* statusUpdate) { m_statusUpdate = statusUpdate; } private: // IBeltTearingPresenter interface implementation bool initializeConfig(const QString &configPath); bool connectToServer(const ServerInfo &serverInfo, const QString &serverName = QString()); void disconnectFromServer(const QString &serverName = QString()) ; bool isConnected(const QString &serverName = QString()) const ; bool sendData(const QByteArray &data, const QString &serverName = QString()); private slots: void onConnected(const QString &serverName); void onDisconnected(const QString &serverName); void onDataReceived(const QString &serverName, const QByteArray &data); void onTcpError(const QString &serverName, const QString &error); private: IStatusUpdate* m_statusUpdate = nullptr; // 状态更新接口 IVrBeltTearingConfig * m_config = nullptr; // 配置接口 DeviceStatusWidget* m_deviceStatusWidget = nullptr; // 设备状态控件 QMap m_tcpClients; // 服务器名称 -> TCP客户端映射 QMap m_serverInfos; // 服务器名称 -> 服务器信息映射 }; #endif // BELTTEARINGPRESENTER_H