aboutsummaryrefslogtreecommitdiff
path: root/include/pio/libs/mqtt/homekit/mqtt/module.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/pio/libs/mqtt/homekit/mqtt/module.h')
-rw-r--r--include/pio/libs/mqtt/homekit/mqtt/module.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/include/pio/libs/mqtt/homekit/mqtt/module.h b/include/pio/libs/mqtt/homekit/mqtt/module.h
new file mode 100644
index 0000000..0a328f3
--- /dev/null
+++ b/include/pio/libs/mqtt/homekit/mqtt/module.h
@@ -0,0 +1,56 @@
+#ifndef HOMEKIT_LIB_MQTT_MODULE_H
+#define HOMEKIT_LIB_MQTT_MODULE_H
+
+#include "./mqtt.h"
+#include "./payload.h"
+#include <homekit/stopwatch.h>
+
+
+namespace homekit::mqtt {
+
+class Mqtt;
+
+class MqttModule {
+protected:
+ bool initialized;
+ StopWatch tickSw;
+ short tickInterval;
+
+ bool receiveOnPublish;
+ bool receiveOnDisconnect;
+
+ bool tickElapsed();
+
+public:
+ MqttModule(short _tickInterval, bool _receiveOnPublish = false, bool _receiveOnDisconnect = false)
+ : initialized(false)
+ , tickInterval(_tickInterval)
+ , receiveOnPublish(_receiveOnPublish)
+ , receiveOnDisconnect(_receiveOnDisconnect) {}
+
+ virtual void tick(Mqtt& mqtt) = 0;
+
+ virtual void onConnect(Mqtt& mqtt) = 0;
+ virtual void onDisconnect(Mqtt& mqtt, espMqttClientTypes::DisconnectReason reason);
+
+ virtual void handlePayload(Mqtt& mqtt, String& topic, uint16_t packetId, const uint8_t *payload, size_t length, size_t index, size_t total);
+ virtual void handleOnPublish(uint16_t packetId);
+
+ inline void setInitialized() {
+ initialized = true;
+ }
+
+ inline void unsetInitialized() {
+ initialized = false;
+ }
+
+ inline short getTickInterval() const {
+ return tickInterval;
+ }
+
+ friend class Mqtt;
+};
+
+}
+
+#endif //HOMEKIT_LIB_MQTT_MODULE_H