75 lines
2.9 KiB
C++
75 lines
2.9 KiB
C++
#ifndef BELTTEARINGPRESENTER_H
|
||
#define BELTTEARINGPRESENTER_H
|
||
|
||
#include "IVrBeltTearingConfig.h"
|
||
#include "IVrTCPClient.h"
|
||
#include <QObject>
|
||
#include <QString>
|
||
#include <QTimer>
|
||
#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);
|
||
void onReconnectTimer();
|
||
|
||
private:
|
||
// 静态回调函数(用于C接口)- 已弃用,使用lambda替代
|
||
// static void tcpDataReceivedCallback(const char* pData, const int nLen);
|
||
// static void tcpLinkStatusCallback(bool connected);
|
||
|
||
// 实例方法
|
||
void handleTcpDataReceived(const QString &serverName, const char* pData, const int nLen);
|
||
void handleTcpLinkStatus(const QString &serverName, bool connected);
|
||
|
||
private:
|
||
IVrBeltTearingConfig * m_config = nullptr; // 配置接口
|
||
IStatusUpdate* m_statusUpdate = nullptr; // 状态更新接口
|
||
DeviceStatusWidget* m_deviceStatusWidget = nullptr; // 设备状态控件
|
||
QMap<QString, IVrTCPClient*> m_tcpClients; // 服务器名称 -> TCP客户端映射
|
||
QMap<QString, ServerInfo> m_serverInfos; // 服务器名称 -> 服务器信息映射
|
||
QMap<QString, QTimer*> m_reconnectTimers; // 重连定时器
|
||
QMap<QString, bool> m_connectionStatus; // 连接状态
|
||
};
|
||
|
||
#endif // BELTTEARINGPRESENTER_H
|