def run(self): logger.info("HC2Driver.run") attempt = 0 while True: self.wait_objects[0] = None self.wait_objects[1] = None self.wait_objects[2] = None self.wait_objects[3] = None self.all_nodes_queried = False if self.init(attempt): self.running = 1 self.attempt = 0 self.wait_objects[0] = self.exit_event self.wait_objects[1] = self.notifications_event self.wait_objects[2] = self.controller self.wait_objects[3] = self.queue_event[0] self.wait_objects[4] = self.queue_event[1] #objects_number = 5 logger.info("HC2Driver.run: Running") while self.running: logger.debug("HC2Driver.run: Waiting for event") res = Wait.multiple( self.wait_objects ) logger.debug("HC2Driver.run: Event: {0}".format( res ) ) if res == 0: logger.debug("HC2Driver.run: Exit Event") #self.Stop() return elif res == 1: logger.debug("HC2Driver.run: Notification Event") self.notify_watchers() elif res == 2: logger.debug("HC2Driver.run: Data Received") self.read_msg() elif res == -1: logger.debug("HC2Driver.run: res = -1") assert res != -1, "Wait.Multiple returned res = -1" else: logger.debug("HC2Driver.run: Message Queue Event: {0}".format(res -3)) self.write_next_msg(res - 3) else: attempt += 1 logger.debug("HC2Driver.run: Max attempts: {0}".format( max_attempts ) ) if max_attempts > 0 and ( attempt >= max_attempts): self.manager.set_driver_ready(self, False) self.notify_watchers() logger.error("HC2Driver.run: Max attempts exceeded") break if attempt < 10: logger.debug( "HC2Driver.run: Connection timeout. Waiting 5 second" ) else: logger.debug( "HC2Driver.run: Connection timeout. Waiting 30 second" ) res = Wait.single( self.exit_event, 30) if res == 0: logger.error("HC2Driver.run: Exit signaled") return