From 2e8986c3564d66a9cda6572e96e7045716ebc86f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniele=20Vigan=C3=B2?= Date: Sat, 1 Jan 2022 23:19:10 +0100 Subject: [PATCH] Refactor net-to-serial.py to support JMRI --- daemons/net-to-serial.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/daemons/net-to-serial.py b/daemons/net-to-serial.py index 1b60c9e..7446d19 100644 --- a/daemons/net-to-serial.py +++ b/daemons/net-to-serial.py @@ -18,23 +18,26 @@ class SerialDaemon: pass async def handle_echo(self, reader, writer): - data = await reader.read(100) - addr = writer.get_extra_info('peername') + while 1: # keep connection to client open + data = await reader.read(100) + if not data: # client has disconnected + break - logging.info("Received {} from {}".format(data, addr[0])) + addr = writer.get_extra_info('peername') + logging.info("Received {} from {}".format(data, addr[0])) - self.ser.write(data) - response = line = self.ser.read() - while line.strip(): - line = self.ser.read_until() - if not line.decode().startswith("<*"): - response += line - logging.info("Send: {}".format(response)) - writer.write(response) - await writer.drain() + self.ser.write(data) + response = line = self.ser.read() + while line.strip(): + line = self.ser.read_until() + if not line.decode().startswith("<*"): + response += line + logging.info("Send: {}".format(response)) + writer.write(response) + await writer.drain() - logging.info("Close the connection") writer.close() + await writer.wait_closed() async def return_board(self): self.ser.write(b'')