@@ -29,10 +29,12 @@ def __init__(self, **kwargs):
2929 self .__lastwill_msg = None
3030 self .__conn_event = threading .Event ()
3131 self .__reg_event = threading .Event ()
32+ self .__init_done_event = threading .Event ()
3233 self .__ka_exit = threading .Event ()
3334 self .__pending_delete_msgs : Dict [str , PubsubMessage ] = {} # dictionary messages waiting module exit notification
3435 self .__exited = False ;
3536
37+
3638 self .__rt = Runtime (topics = kwargs .get ('topics' , settings .get ('topics' )), ** kwargs .get ('runtime' , settings .get ('runtime' )))
3739
3840 # register exit handler to send delete runtime request
@@ -94,7 +96,12 @@ def pubsub_connected(self, client):
9496 def pubsub_error (self , desc , data ):
9597 logger .error (desc , data )
9698
97- def wait_reg (self , timeout_secs ):
99+ def wait_init (self , timeout_secs = 15 ):
100+ evt_flag = self .__init_done_event .wait (timeout_secs )
101+ if not evt_flag :
102+ raise RuntimeException ("timeout waiting for init." , f"Runtime init failed after { timeout_secs } secs" )
103+
104+ def __wait_reg (self , timeout_secs = 10 ):
98105 evt_flag = self .__conn_event .wait (10 )
99106 if not evt_flag :
100107 raise RuntimeException ("timeout waiting for MQTT connection." , "Could not connect." )
@@ -124,17 +131,16 @@ def __register_runtime_send(self, reg_msg, timeout_secs, reg_attempts, reg_fail_
124131 until register event is set"""
125132
126133 reg_count = reg_attempts
134+ if reg_attempts == 0 : reg_count = - 1
127135 reg_flag = False
128136 while True :
129- if reg_count > 0 :
130- logger .info ("Runtime attempting to register..." );
131- self .__pubsub_client .message_publish (reg_msg )
132- reg_flag = self .wait_reg (timeout_secs )
133- if reg_flag == True : break # event is set; registration response received
134- reg_count = reg_count - 1
135- if reg_count == 0 : break
137+ logger .info (f"Runtime attempting to register... { reg_count } " );
138+ self .__pubsub_client .message_publish (reg_msg )
139+ reg_flag = self .__wait_reg (timeout_secs )
140+ if reg_flag == True : break # event is set; registration response received
141+ if reg_count > 0 : reg_count = reg_count - 1
142+ if reg_count == 0 : break
136143
137-
138144 if not reg_flag :
139145 if reg_fail_error : raise RuntimeException ("runtime registration failed." , "Could not register runtime after {} attempts." .format (reg_attempts ))
140146 else :
@@ -159,7 +165,9 @@ def __register_runtime_done(self):
159165 args = (ka_interval_sec ,))
160166 self .__ka_thread .start ()
161167
162- logger .info ("Runtime registration done." )
168+ # flag init is done
169+ logger .info ("Runtime registration done (or skiped)." )
170+ self .__init_done_event .set ()
163171
164172 def reg (self , decoded_msg ):
165173 msg_data = decoded_msg .get ('data' )
0 commit comments