Reconnexion automatique au serveur MQTT lors d'une déconnexion

This commit is contained in:
2023-06-17 06:57:49 -04:00
parent 2d6edd0769
commit 428cec7c29
14 changed files with 1849 additions and 70 deletions
+17 -13
View File
@@ -145,19 +145,23 @@ CMQTTMessage CCANDataLogger::GetMQTTMessage(CCANMessage *Msg, bool Format )
{
QString SignalData;
CCANSignal Signal = Msg->mSignalsList.at(signal);
if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_UNSIGNED_INT)
{
SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg((quint64)Signal.mPhysicalValue);
}
else if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_SIGNED_INT)
{
SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg((qint64)Signal.mPhysicalValue);
}
else if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_32_BIT_FLOAT ||
Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_64_BIT_DOUBLE)
{
SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg(Signal.mPhysicalValue,0,'f',1);
}
//JFM 2023-06-16 changé pour forcer toujours à float
SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg(Signal.mPhysicalValue,0,'f',1);
// if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_UNSIGNED_INT)
// {
// SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg((quint64)Signal.mPhysicalValue);
// }
// else if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_SIGNED_INT)
// {
// SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg((qint64)Signal.mPhysicalValue);
// }
// else if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_32_BIT_FLOAT ||
// Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_64_BIT_DOUBLE)
// {
// SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg(Signal.mPhysicalValue,0,'f',1);
// }
MsgPayload.append(SignalData);
if(signal < Msg->mSignalsList.size()-1)
@@ -8,6 +8,10 @@ CMQTTClientWrapper::CMQTTClientWrapper()
mMQTTRefreshTimer = new QTimer;
mMQTTRefreshTimer->setSingleShot(true);
connect(mMQTTRefreshTimer,&QTimer::timeout,this,&CMQTTClientWrapper::MQTTSendTimerExpired);
mMQTTReconnectTimer = new QTimer;
mMQTTReconnectTimer->setSingleShot(true);
connect(mMQTTReconnectTimer,&QTimer::timeout,this,&CMQTTClientWrapper::MQTTReconnectTimerExpired);
mProgramPtr = 0;
}
@@ -84,12 +88,14 @@ void CMQTTClientWrapper::StateChanged()
qDebug("MQTT client Disconnected");
mProgramPtr->SetMQTTConnectionSatusRequest(false);
mMQTTRefreshTimer->stop();
mMQTTReconnectTimer->start(MQTT_CLIENT_RECONNECT_TIMEOUT);
break;
}
case QMqttClient::Connected:
{
mProgramPtr->SetMQTTConnectionSatusRequest(true);
mMQTTRefreshTimer->start(mMQTTParams.mMQTTTransmitTimeout);
mMQTTReconnectTimer->stop();
qDebug("MQTT client Connected");
break;
}
@@ -136,8 +142,8 @@ void CMQTTClientWrapper::MQTTSendTimerExpired()
{
qint32 res = mMQTTClient.publish(MessagesList->at(i).mMessageTopic,MessagesList->at(i).mMessagePayload.toLocal8Bit(),0,true);
qDebug("%s : %s",qPrintable(MessagesList->at(i).mMessageTopic), qPrintable(MessagesList->at(i).mMessagePayload));
QString LogMsg = QString("Envoi d'un message MQTT. Topic: %1. Payload: %2").arg(MessagesList->at(i).mMessageTopic).arg(MessagesList->at(i).mMessagePayload);
// CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,false);
QString LogMsg = QString("Envoi d'un message MQTT. Topic: %1 Payload: %2").arg(MessagesList->at(i).mMessageTopic).arg(MessagesList->at(i).mMessagePayload);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,false);
}
qDebug("Sent %d MQTT messages",MessagesList->size());
@@ -147,3 +153,8 @@ void CMQTTClientWrapper::MQTTSendTimerExpired()
mMQTTRefreshTimer->start(mMQTTParams.mMQTTTransmitTimeout);
}
void CMQTTClientWrapper::MQTTReconnectTimerExpired()
{
ConnectToBroker();
}
@@ -1,6 +1,7 @@
#ifndef MQTTCLIENTWRAPPER_H
#define MQTTCLIENTWRAPPER_H
#include "defines.h"
#include <QtMqtt/QtMqtt>
#include <QMqttClient>
@@ -28,6 +29,7 @@ public:
COtarcikCan *mProgramPtr;
QString mMQTTClientID;
QTimer *mMQTTRefreshTimer;
QTimer *mMQTTReconnectTimer;
private:
@@ -38,6 +40,7 @@ private:
public slots:
void StateChanged();
void MQTTSendTimerExpired();
void MQTTReconnectTimerExpired();
};
+1 -1
View File
@@ -4,7 +4,7 @@
#define GENERAL_MESSAGES_MAX_LOG_LINES 5000 //The number of lines of general status log we keep in the general status window (avoids fucking up because you know.... RAM)
#define MQTT_CLIENT_RECONNECT_TIMEOUT 5000 //Time in ms between reconnect attemps to MQTT broker when connection is lost
enum eOtarcikGeneralReturns
{
RET_OK = 0,