@@ -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