95 lines
3.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 BELTTEARINGPRESENTER_H
#define BELTTEARINGPRESENTER_H
#include "IVrBeltTearingConfig.h"
#include "IVrTCPClient.h"
#include "IStatusUpdate.h"
#include <QWidget>
#include <QObject>
#include <QString>
#include <QTimer>
#include <QByteArray>
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<QString, ServerInfo> 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<QString, IVrTCPClient*> m_tcpClients; // 服务器名称 -> TCP客户端映射
QMap<QString, ServerInfo> m_serverInfos; // 服务器名称 -> 服务器信息映射
QMap<QString, bool> m_connectionStatus; // 连接状态
QMap<QString, bool> m_workThreadStarted; // 工作线程启动状态
QMap<QString, QByteArray> m_dataBuffers; // 每个服务器的数据缓存
// 处理完整数据包的方法
void processCompletePacket(const QString &serverName, const QByteArray &completeData);
};
#endif // BELTTEARINGPRESENTER_H