YULTek/Otarcik_CAN/Sources/CloudLogging/MQTTClientWrapper.h
2025-05-03 20:26:14 -04:00

90 lines
2.3 KiB
C++

#ifndef MQTTCLIENTWRAPPER_H
#define MQTTCLIENTWRAPPER_H
#include "defines.h"
#include <QtMqtt/QtMqtt>
#include <QMqttClient>
#include "CloudParams.h"
#include "MQTTMessage.h"
#include <QList>
class COtarcikCan;
class CCANDevice;
class CComputerBoardInterface;
class CMQTTClientWrapper : public QObject
{
Q_OBJECT
public:
typedef enum
{
MQTT_DROP_MSG_MODE,
MQTT_TRANSMIT_MSG_MODE,
MQTT_QUEUE_MSG_MODE
}eMQTTMsgQueuingMode;
CMQTTClientWrapper();
~CMQTTClientWrapper();
int SetMQTTParams(CCloudParams *Params);
#ifdef ENABLE_CHIPSET_DRIVER
int SetCPUInterface(CComputerBoardInterface *CPUIF);
#endif
int SetMQTTServerPresenceCANBit(quint64 CANBit);
int ConnectToBroker();
int NewMQTTMessages(QList<CMQTTMessage> MessagesList);
int DisconnectFromBroker();
int SendMQTTTestMessage();
int SetCANDevicesList(QList<CCANDevice*> *List);
int StartMQTTClient();
int StopMQTTClient();
quint64 GetMQTTServerPresenceCANMask();
bool IsMQTTClientConnected();
QString GetMQTTClientConnectionState();
int SendMQTTMessages(QList<CMQTTMessage> *MessagesList);
#ifdef ENABLE_DEVELOPMENT_DEBUG_TOOLS
int ForceMQTTClientDisconnection(bool Disconnect);
bool mMQTTDisconnectionForced;
#endif
COtarcikCan *mProgramPtr;
private:
QTimer *mMQTTRefreshTimer;
QTimer *mMQTTReconnectTimer;
QTimer *mMQTTQueueFlushTimer;
eMQTTMsgQueuingMode mMessagesQueueMode;
bool mDisconnectionIsVoluntary;
QMqttClient mMQTTClient;
CCloudParams mMQTTParams;
QList<CCANDevice*> *mCANDevicesList;
QList<CMQTTMessage*> mMQTTMessagesQueue;
bool mIsClientConnecting;
QString mCircularBufferStatusText, mBufferingModeText, mUploadTimeText;
#ifdef ENABLE_CHIPSET_DRIVER
CComputerBoardInterface *mCPUInterface;
#endif
CMQTTMessage GetSystemStatusMessage();
int SendNextQueueMessage();
quint64 mMQTTPresenceCANBit;
int UpdateGUIBufferingStatus();
public slots:
void StateChanged();
void MQTTSendTimerExpired();
void MQTTReconnectTimerExpired();
void MQTTQueueFlushTimerExipred();
void MQTTClientError(QMqttClient::ClientError error);
void MQTTMessageSent(qint32 MsgID);
void MQTTMessageStatusChanged(qint32 id, QMqtt::MessageStatus s, const QMqttMessageStatusProperties &properties);
};
#endif // MQTTCLIENTWRAPPER_H