#ifndef WEBSOCKETCLIENT_H #define WEBSOCKETCLIENT_H #include #include #include #include #include #include "widgets/chatView/chat1/chatmessage.h" class WebSocketClient : public QObject { Q_OBJECT public: explicit WebSocketClient(QObject *parent = nullptr); ~WebSocketClient(); // 连接到聊天室 void connectToRoom(const QString& roomId); // 断开连接 void disconnect(); // 发送消息 void sendMessage(const QString& content, const QString& type = "room"); // 发送图片消息 void sendImageMessage(const QString& imagePath, const QString& text = QString()); // 获取连接状态 bool isConnected() const; // 设置是否自动重连 void setAutoReconnect(bool enable); // 设置最大重连尝试次数 void setMaxReconnectAttempts(int maxAttempts); QString roomId() const { return m_roomId; } signals: // 收到新消息信号 void messageReceived(const ChatMessage& message); // 直播状态 void liveStatus(const QString& message); // 统计信息更新 void statsUpdate(const QJsonObject& statsData); // 连接状态变化信号 void connectionStateChanged(bool connected); // 错误信号 void errorOccurred(const QString& errorMessage); // 正在尝试重连的信号 void reconnecting(int attempt, int maxAttempts); // 重连失败的信号 void reconnectFailed(); private slots: void onConnected(); void onDisconnected(); void onTextMessageReceived(const QString& message); void onError(QAbstractSocket::SocketError error); void sendPing(); // 尝试重新连接 void tryReconnect(); // 执行实际的重连操作 void doReconnect(); private: QWebSocket m_webSocket; QString m_roomId; QTimer m_pingTimer; bool m_connected; bool m_autoReconnect; // 是否自动重连 int m_reconnectAttempts; // 当前重连尝试次数 int m_maxReconnectAttempts; // 最大重连尝试次数 QTimer m_reconnectTimer; // 重连定时器 bool m_isReconnecting; // 是否正在重连中 // 构建WebSocket URL QUrl buildWebSocketUrl(const QString& roomId); }; #endif // WEBSOCKETCLIENT_H