diff --git a/tools/mock_elm327.py b/tools/mock_elm327.py index 3ce7cb2..97aa689 100644 --- a/tools/mock_elm327.py +++ b/tools/mock_elm327.py @@ -58,24 +58,30 @@ class ElmHandler(socketserver.StreamRequestHandler): print(f"\nπŸ”Œ ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: {self.client_address}") # ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ привСтствиС - self.wfile.write(b"ELM327 v1.5\r\n>") + self.wfile.write(b"\r\nELM327 v1.5\r\n>") + self.wfile.flush() + buf = b"" while True: try: - data = self.rfile.readline() - if not data: + # Π§ΠΈΡ‚Π°Π΅ΠΌ ΠΏΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎ β€” ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ \r ΠΈΠ»ΠΈ \n ΠΊΠ°ΠΊ ΠΊΠΎΠ½Π΅Ρ† строки + ch = self.rfile.read(1) + if not ch: break - cmd = data.decode("utf-8", errors="ignore").strip().upper() - if not cmd: - continue + if ch in (b'\n', b'\r'): + if buf: + cmd = buf.decode("utf-8", errors="ignore").strip().upper() + buf = b"" + if cmd: + response = self._process(cmd) + if response: + self.wfile.write(response) + self.wfile.flush() + else: + buf += ch - response = self._process(cmd) - if response: - self.wfile.write(response) - self.wfile.flush() - - except (ConnectionResetError, BrokenPipeError): + except (ConnectionResetError, BrokenPipeError, OSError): break except Exception as e: print(f" ⚠️ Ошибка: {e}") @@ -144,7 +150,10 @@ def main(): parser.add_argument("--host", default="0.0.0.0") args = parser.parse_args() - server = socketserver.ThreadingTCPServer((args.host, args.port), ElmHandler) + class ReuseTCPServer(socketserver.ThreadingTCPServer): + allow_reuse_address = True + + server = ReuseTCPServer((args.host, args.port), ElmHandler) print(f"πŸš— Mock ELM327 Π½Π° {args.host}:{args.port}") print(f" ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ: telnet localhost {args.port}") print(f" Ctrl+C Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ")