From db20635094164c69fdba498f05a3ff622f62e9af Mon Sep 17 00:00:00 2001 From: MuedeHydra Date: Mon, 24 Nov 2025 22:03:59 +0100 Subject: [PATCH] non blicking input --- client.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/client.py b/client.py index ebefae2..f2b51bc 100644 --- a/client.py +++ b/client.py @@ -1,11 +1,15 @@ import socket import json import time -import datetime import threading +import datetime import select +import sys +import termios +import tty run = True +new_msg = [] def make_payload(name, msg): payload = { @@ -23,13 +27,56 @@ def read_msg(s): data = s.recv(1024) if data: msg = json.loads(data.decode("utf-8")) - print(f"{msg["name"]} {datetime.datetime.fromtimestamp(float(msg["time"])).strftime("%d-%m-%Y %H:%M")}") - print(msg["msg"]) + # print(f"{msg["name"]} {datetime.datetime.fromtimestamp(float(msg["time"])).strftime("%d-%m-%Y %H:%M")}") + # print(msg["msg"]) + new_msg.append(msg) else: print("Server disconnected") run = False # print(f"Received {data!r}") +def input_handel(name, s): + global run + msg_buffer = "" + old_settings = termios.tcgetattr(sys.stdin) + try: + tty.setraw(sys.stdin.fileno()) + print("\r> " + msg_buffer, end="") + while run: + if select.select([sys.stdin], [], [], 0)[0]: + ch = sys.stdin.read(1) + + if ord(ch) == 127: + if len(msg_buffer) > 0: + msg_buffer = msg_buffer[:-1] + print("\r> " + msg_buffer + " ", end="") + elif ord(ch) == 13: + if msg_buffer in ["", " "]: + run = False + print("\r\nClosing socket and exit") + + elif run: + payload = make_payload(name, msg_buffer) + s.sendall(payload) + msg_buffer = "" + print("\r\n> ", end="") + + else: + msg_buffer += ch + print("\r> " + msg_buffer, end="") + + else: + time.sleep(0.1) + if len(new_msg) > 0: + msg = new_msg.pop() + print(f"\r{msg["name"]} {datetime.datetime.fromtimestamp(float(msg["time"])).strftime("%d-%m-%Y %H:%M")}") + print("\r" + msg["msg"]) + print() + print("\r> " + msg_buffer, end="") + finally: + termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings) + + def event_handel(name, s): global run while run: @@ -56,7 +103,8 @@ if __name__ == "__main__": with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) name = input("Enter name: ") - threading.Thread(target=event_handel, args=(name, s,)).start() + # threading.Thread(target=event_handel, args=(name, s,)).start() + threading.Thread(target=input_handel, args=(name, s,)).start() read_msg(s) except ConnectionRefusedError: print("Could not connect to the server!")