@@ -33,11 +33,20 @@ class MqttPub : virtual public MqttConnector<T> {
3333 StatefulService<T>* statefulService,
3434 AsyncMqttClient* mqttClient,
3535 const String& pubTopic = " " ,
36+ bool retain = false ,
3637 size_t bufferSize = DEFAULT_BUFFER_SIZE) :
37- MqttConnector<T>(statefulService, mqttClient, bufferSize), _stateReader(stateReader), _pubTopic(pubTopic) {
38+ MqttConnector<T>(statefulService, mqttClient, bufferSize),
39+ _stateReader (stateReader),
40+ _pubTopic (pubTopic),
41+ _retain (retain) {
3842 MqttConnector<T>::_statefulService->addUpdateHandler ([&](const String& originId) { publish (); }, false );
3943 }
4044
45+ void setRetain (const bool retain) {
46+ _retain = retain;
47+ publish ();
48+ }
49+
4150 void setPubTopic (const String& pubTopic) {
4251 _pubTopic = pubTopic;
4352 publish ();
@@ -51,6 +60,7 @@ class MqttPub : virtual public MqttConnector<T> {
5160 private:
5261 JsonStateReader<T> _stateReader;
5362 String _pubTopic;
63+ bool _retain;
5464
5565 void publish () {
5666 if (_pubTopic.length () > 0 && MqttConnector<T>::_mqttClient->connected ()) {
@@ -64,7 +74,7 @@ class MqttPub : virtual public MqttConnector<T> {
6474 serializeJson (json, payload);
6575
6676 // publish the payload
67- MqttConnector<T>::_mqttClient->publish (_pubTopic.c_str (), 0 , false , payload.c_str ());
77+ MqttConnector<T>::_mqttClient->publish (_pubTopic.c_str (), 0 , _retain , payload.c_str ());
6878 }
6979 }
7080};
@@ -145,9 +155,10 @@ class MqttPubSub : public MqttPub<T>, public MqttSub<T> {
145155 AsyncMqttClient* mqttClient,
146156 const String& pubTopic = " " ,
147157 const String& subTopic = " " ,
158+ bool retain = false ,
148159 size_t bufferSize = DEFAULT_BUFFER_SIZE) :
149160 MqttConnector<T>(statefulService, mqttClient, bufferSize),
150- MqttPub<T>(stateReader, statefulService, mqttClient, pubTopic, bufferSize),
161+ MqttPub<T>(stateReader, statefulService, mqttClient, pubTopic, retain, bufferSize),
151162 MqttSub<T>(stateUpdater, statefulService, mqttClient, subTopic, bufferSize) {
152163 }
153164
0 commit comments