diff --git a/network_backend.py b/network_backend.py index 37d232d..29dcceb 100644 --- a/network_backend.py +++ b/network_backend.py @@ -1,6 +1,7 @@ import socket import selectors import time +import signal, os from msg_container import MsgContainer from receiver.nmea_packetizer import NmeaPacketizer @@ -34,8 +35,9 @@ class NetworkBackend(ABackend): self.thread.start() def stop(self): - self.loop_enable = False - self.thread.join() + if self.loop_enable: + self.loop_enable = False + self.thread.join() def create_xcvr(self, name: str) -> Transceiver: obj = Transceiver(self, name) @@ -113,6 +115,12 @@ class NetworkBackend(ABackend): finally: self.sel.close() +def handler(signum, frame, be: NetworkBackend): + sig_name = signal.Signals(signum).name + print(f'Signal handler called with signal {sig_name} ({signum})') + be.stop() + be.disconnect() + if __name__ == "__main__": server_list = [ {'name': " neo-f9p", 'host': "192.168.22.93", 'port': 8721}, @@ -120,8 +128,13 @@ if __name__ == "__main__": ] transceiver = {} + # TCPIP multi source receiver mc = NetworkBackend(server_list) + + # Set the signal handler + signal.signal(signal.SIGINT, lambda signum, frame: handler(signum, frame, mc)) + for grm in [" neo-f9p", "zed-x20p"]: nmea_rx_list = [ Gll(grm, 'GN'), @@ -170,9 +183,13 @@ if __name__ == "__main__": # Start thread mc.start() - for n in range(10): - for grm in [" neo-f9p", "zed-x20p"]: - transceiver[grm].send(b'Hallo') + while True: + try: + for grm in [" neo-f9p", "zed-x20p"]: + transceiver[grm].send(b'Hallo') + except ValueError: + break + time.sleep(1) # Stop thread @@ -180,3 +197,5 @@ if __name__ == "__main__": # code never reached mc.disconnect() + +