// 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);
|
}
|
}
|
}
|