Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 03c6c71

Browse files
authored
Merge pull request #34 from msgflo/fix-reconnect
Automatically reconnect on broker disconnect
2 parents 9bbe4d4 + 734d1d2 commit 03c6c71

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

msgflo/msgflo.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,11 +243,12 @@ def __init__(self, broker):
243243
Engine.__init__(self, broker)
244244

245245
self._client = mqtt.Client()
246+
self.connected = False
246247

247248
if self.broker_info.username:
248249
self._client.username_pw_set(self.broker_info.username, self.broker_info.password)
249250

250-
#self._client.on_connect = _on_connect
251+
self._client.on_disconnect = lambda c, u, rc: self._on_disconnect(c, u, rc)
251252
self._client.on_connect = lambda c, u, f, rc: self._on_connect(c, u, f, rc)
252253
self._client.on_message = lambda c, u, m: self._on_message(c, u, m)
253254
self._client.on_subscribe = lambda c, u, m, q: self._on_subscribe(c, u, m, q)
@@ -295,7 +296,8 @@ def _message_pump_greenthread(self):
295296

296297
def _on_connect(self, client, userdata, flags, rc):
297298
logger.debug("Connected with result code" + str(rc))
298-
299+
self.connected = True
300+
299301
# Subscribe to queues for inports
300302
subscriptions = [] # ("topic", QoS)
301303
for port in self.participant.definition['inports']:
@@ -309,12 +311,26 @@ def _on_connect(self, client, userdata, flags, rc):
309311

310312
# Send discovery messsage
311313
def send_discovery():
312-
while self.participant:
314+
while self.participant and self.connected:
313315
delay = self.discovery_period/2.2
314316
self._send_discovery(self.participant.definition)
315317
gevent.sleep(delay) # yields
316318
gevent.Greenlet.spawn(send_discovery)
317319

320+
def _on_disconnect(self, client, userdata, rc):
321+
logger.debug("Disconnected with code" + str(rc))
322+
self.connected = False
323+
324+
def try_reconnect():
325+
while not self.connected:
326+
logger.debug('reconnect()')
327+
try:
328+
self._client.reconnect()
329+
except Exception as e:
330+
pass
331+
gevent.sleep(2.0)
332+
gevent.Greenlet.spawn(try_reconnect)
333+
318334
def _on_subscribe(self, client, userdata, mid, granted_qos):
319335
logger.debug('subscribed %s' % str(mid))
320336

0 commit comments

Comments
 (0)