diff --git a/mn.py b/mn.py new file mode 100644 index 0000000000000000000000000000000000000000..0c97b757d82439d46affc20b53e6c9a8734a71c2 --- /dev/null +++ b/mn.py @@ -0,0 +1,90 @@ +import socket +import sys +import json +import keyboard + +# Liste pour stocker les touches pressées pour former un message +buffer = [] + +# Nom d'utilisateur et destination du message +user = "" +destination = "" + +# Socket du client +client_socket = None + +# Fonction appelée lorsqu'une touche est pressée +def on_key_event(e): + # Si Ctrl+M est pressé, on demande à l'utilisateur d'entrer le message. + if e.name == 'm' and e.event_type == 'down' and keyboard.is_pressed('ctrl'): + clear_buffer() + print("Enter your message: ") + keyboard.hook(capture_keys) + +# Fonction pour capturer les touches pressées et les ajouter au buffer +def capture_keys(e): + # Si Enter est pressé, on arrête de capturer les touches et on affiche le message + if e.name == 'enter' and e.event_type == 'down': + keyboard.unhook(capture_keys) + send_message() + else: + # Sinon, on ajoute la touche au buffer + if e.name == 'backspace': + remove_last_key() + else: + add_key_to_buffer(e) + +# Fonction pour démarrer le client +def start_client(): + global client_socket + global user + global destination + user = input("Enter your username: ") # Demande le nom d'utilisateur + destination = input("Enter the destination username: ") # Demande la destination du message + client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Crée un socket + server_address = ('localhost', int(sys.argv[1])) if len(sys.argv) > 1 else ('localhost', 12345) + try: + client_socket.connect(server_address) # Connecte au serveur + client_socket.settimeout(1) # Définit une limite de temps pour la réception de données + print("Connected to server") + setup_keyboard_shortcuts() + receive_messages() + except ConnectionRefusedError: + print("Connection refused. Please make sure the server is running.") + +# Fonction pour envoyer le message +def send_message(): + message = ''.join(buffer[1:]) # Assemble les touches dans un message + data = json.dumps({"user": user, "destination": destination, "message": message}) # Formatte les données en JSON + client_socket.send(data.encode('utf-8')) # Envoie les données au serveur + +# Fonction pour recevoir les messages du serveur +def receive_messages(): + while True: + try: + res = client_socket.recv(1024) # Reçoit les données du serveur + if res: + print(f"Received message: {res.decode('utf-8')}") # Affiche le message reçu + except socket.timeout: + continue + +# Fonction pour configurer les raccourcis clavier +def setup_keyboard_shortcuts(): + keyboard.add_hotkey('ctrl+q', lambda: sys.exit(0)) # Permet de quitter le programme avec Ctrl+Q + keyboard.on_press(on_key_event) # Déclenche la fonction on_key_event lorsqu'une touche est pressée + +# Fonction pour ajouter une touche au buffer +def add_key_to_buffer(e): + buffer.append({"space": " ", "backspace": ""}.get(e.name, e.name)) + +# Fonction pour supprimer la dernière touche du buffer +def remove_last_key(): + if buffer: + buffer.pop() # Supprime la dernière touche si c'est "backspace" + +# Fonction pour effacer le buffer +def clear_buffer(): + buffer.clear() + +if __name__ == "__main__": + start_client() # Lance le client