Files
Mqtt-Dcc/src/MqttManager.cpp
T
2026-08-05 09:14:31 +02:00

53 lines
1.3 KiB
C++

#include "MqttManager.h"
#include <Arduino.h>
MqttManager* MqttManager::instance = nullptr;
MqttManager::MqttManager() {}
void MqttManager::begin(const char* server, uint16_t port, MessageCallback cb) {
serverAddr = server;
serverPort = port;
messageCb = cb;
client.setServer(serverAddr, serverPort);
instance = this;
client.setCallback(MqttManager::staticCallback);
}
void MqttManager::staticCallback(char* topic, byte* payload, unsigned int length) {
if (instance && instance->messageCb) instance->messageCb(topic, payload, length);
}
void MqttManager::connect() {
while (!client.connected()) {
Serial.print("Connecting to MQTT...");
if (client.connect("esp32-dcc")) {
Serial.println("connected");
} else {
Serial.print("failed rc=");
Serial.print(client.state());
Serial.println("; retrying in 2s");
delay(2000);
}
}
}
void MqttManager::loop() {
if (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) connect();
client.loop();
}
}
bool MqttManager::publish(const char* topic, const char* payload) {
if (!client.connected()) return false;
return client.publish(topic, payload);
}
bool MqttManager::subscribe(const char* topic) {
if (!client.connected()) return false;
return client.subscribe(topic);
}
bool MqttManager::connected() { return client.connected(); }