#include "MqttManager.h" #include 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(); }