53 lines
1.3 KiB
C++
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(); }
|