fertao
2025-07-28 ec576f7460a1c172f47758a4edcaa846e49db4d2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// heartbeatworker.cpp
#include "heartbeatworker.h"
#include "uploador.h" // 包含必要的头文件
#define HEARTBEAT_INTERVAL 5000
HeartbeatWorker::HeartbeatWorker(QTcpSocket* socket, QObject *parent)
    : QObject(parent), m_socket(socket), m_heartCheckTimes(HEART_CHECK_TIMES)
{
    m_timer = new QTimer(this);
    connect(m_timer, &QTimer::timeout, this, &HeartbeatWorker::checkHeartbeat);
}
 
HeartbeatWorker::~HeartbeatWorker()
{
    stop();
    delete m_timer;
}
 
void HeartbeatWorker::start()
{
    m_timer->start(HEARTBEAT_INTERVAL); // 假设定义了心跳间隔
}
 
void HeartbeatWorker::stop()
{
    m_timer->stop();
}
 
void HeartbeatWorker::checkHeartbeat() {
    if(!m_socket) return;
 
    // 通过信号槽请求主线程发送心跳包
    emit requestHeartbeat();
}
 
void HeartbeatWorker::handleReconnect()
{
    reconnect();
}
 
void HeartbeatWorker::reconnect()
{
    if(m_socket) {
        m_socket->abort();
        m_socket->connectToHost("192.168.1.2", 8888);
 
        if(m_socket->waitForConnected(3000)) {
            qDebug() << "Reconnected successfully";
            m_heartCheckTimes = HEART_CHECK_TIMES;
        } else {
            qDebug() << "Reconnect failed:" << m_socket->errorString();
            // 可以添加指数退避重试逻辑
            QTimer::singleShot(5000, this, &HeartbeatWorker::handleReconnect);
        }
    }
}