From 18f450c58bea145a48be2192f94ebd77f4fce208 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Wed, 14 Sep 2022 17:43:07 +0200 Subject: [PATCH] Periodically try to connect RNodes that were unavailable at startup. Closes #87. --- RNS/Interfaces/RNodeInterface.py | 18 ++++++++++++------ RNS/Transport.py | 13 +++++++++++-- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/RNS/Interfaces/RNodeInterface.py b/RNS/Interfaces/RNodeInterface.py index aaa636f..8e8b2ef 100644 --- a/RNS/Interfaces/RNodeInterface.py +++ b/RNS/Interfaces/RNodeInterface.py @@ -197,14 +197,20 @@ class RNodeInterface(Interface): try: self.open_port() + + if self.serial.is_open: + self.configure_device() + else: + raise IOError("Could not open serial port") + except Exception as e: RNS.log("Could not open serial port for interface "+str(self), RNS.LOG_ERROR) - raise e + RNS.log("The contained exception was: "+str(e), RNS.LOG_ERROR) + RNS.log("Reticulum will attempt to bring up this interface periodically", RNS.LOG_ERROR) + thread = threading.Thread(target=self.reconnect_port) + thread.setDaemon(True) + thread.start() - if self.serial.is_open: - self.configure_device() - else: - raise IOError("Could not open serial port") def open_port(self): RNS.log("Opening serial port "+self.port+"...") @@ -620,7 +626,7 @@ class RNodeInterface(Interface): def reconnect_port(self): while not self.online: try: - time.sleep(3.5) + time.sleep(5) RNS.log("Attempting to reconnect serial port "+str(self.port)+" for "+str(self)+"...", RNS.LOG_VERBOSE) self.open_port() if self.serial.is_open: diff --git a/RNS/Transport.py b/RNS/Transport.py index 0e3ae6d..e6b5acc 100755 --- a/RNS/Transport.py +++ b/RNS/Transport.py @@ -699,13 +699,22 @@ class Transport: timer = threading.Timer(wait_time, interface.process_announce_queue) timer.start() - wait_time_str = str(round(wait_time*1000,3))+"ms" + if wait_time < 1: + wait_time_str = str(round(wait_time*1000,2))+"ms" + else: + wait_time_str = str(round(wait_time*1,2))+"s" + ql_str = str(len(interface.announce_queue)) RNS.log("Added announce to queue (height "+ql_str+") on "+str(interface)+" for processing in "+wait_time_str, RNS.LOG_EXTREME) else: wait_time = max(interface.announce_allowed_at - time.time(), 0) - wait_time_str = str(round(wait_time*1000,3))+"ms" + + if wait_time < 1: + wait_time_str = str(round(wait_time*1000,2))+"ms" + else: + wait_time_str = str(round(wait_time*1,2))+"s" + ql_str = str(len(interface.announce_queue)) RNS.log("Added announce to queue (height "+ql_str+") on "+str(interface)+" for processing in "+wait_time_str, RNS.LOG_EXTREME)