From 18d9dc1f44b7025351a810f9169978ec3d87ae9b Mon Sep 17 00:00:00 2001
From: OUDJOUDI Mazis <mazis.oudjoudi9@etu.univ-lorraine.fr>
Date: Mon, 29 Apr 2024 21:43:44 +0000
Subject: [PATCH] Upload New File

---
 client.py | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 123 insertions(+)
 create mode 100644 client.py

diff --git a/client.py b/client.py
new file mode 100644
index 0000000..eb7ff17
--- /dev/null
+++ b/client.py
@@ -0,0 +1,123 @@
+import socket
+import threading
+import tkinter as tk
+from tkinter import messagebox
+
+def receive_messages():
+    while True:
+        try:
+            message = client_socket.recv(1024).decode()
+            if message.startswith('[CONNEXION]'):
+                user = message.split(':')[1]
+                users_connected.append(user)
+                update_users_list()
+                communication_box.insert(tk.END, f"[{user}]: {user} vient d'arriver sur le chat\n")
+            elif message.startswith('[DECONNEXION]'):
+                user = message.split(':')[1]
+                users_connected.remove(user)
+                update_users_list()
+            else:
+                message_parts = message.split(':', 1)  # Diviser en deux parties au maximum
+                if len(message_parts) == 2:
+                    user, msg = message_parts
+                    communication_box.insert(tk.END, f"[{user}]: {msg}\n")
+                else:
+                    # Le message n'est pas au bon format
+                    print("Le message reçu n'est pas au bon format :", message)
+        except ConnectionResetError:
+            messagebox.showinfo("Information", "Connexion au serveur perdue.")
+            break
+
+def send_message(event=None):
+    message = message_entry.get()
+    message = f"[{username}]: {message}"
+    client_socket.send(message.encode())
+    message_entry.delete(0, tk.END)
+    if message == '[QUIT]':
+        client_socket.close()
+        root.quit()
+
+def disconnect():
+    client_socket.send('[QUIT]'.encode())
+
+def connect_to_server():
+    global client_socket, username
+    server_ip = server_ip_entry.get()
+    server_port = int(server_port_entry.get())
+    username = username_entry.get()
+
+    try:
+        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        client_socket.connect((server_ip, server_port))
+        client_socket.send(username.encode())
+        send_button.focus_set()
+        receive_thread = threading.Thread(target=receive_messages)
+        receive_thread.start()
+        communication_box.insert(tk.END, f"[{username}]: Vous êtes connecté au chat\n")
+    except ConnectionRefusedError:
+        messagebox.showinfo("Information", "Impossible de se connecter au serveur. Vérifiez l'adresse IP et le port.")
+
+def on_closing():
+    if messagebox.askokcancel("Quitter", "Êtes-vous sûr de vouloir quitter ?"):
+        disconnect()
+        root.destroy()
+        broadcast_message(f"[DECONNEXION]:{username}")
+
+def update_users_list():
+    users_list.delete(0, tk.END)
+    for user in users_connected:
+        users_list.insert(tk.END, user)
+
+root = tk.Tk()
+root.title("Client")
+root.protocol("WM_DELETE_WINDOW", on_closing)
+
+connection_frame = tk.Frame(root)
+connection_frame.pack(padx=10, pady=10)
+
+server_ip_label = tk.Label(connection_frame, text="Adresse IP du serveur:")
+server_ip_label.grid(row=0, column=0, sticky=tk.W)
+server_ip_entry = tk.Entry(connection_frame)
+server_ip_entry.grid(row=0, column=1, padx=5)
+
+server_port_label = tk.Label(connection_frame, text="Port du serveur:")
+server_port_label.grid(row=1, column=0, sticky=tk.W)
+server_port_entry = tk.Entry(connection_frame)
+server_port_entry.grid(row=1, column=1, padx=5)
+
+username_label = tk.Label(connection_frame, text="Nom d'utilisateur:")
+username_label.grid(row=2, column=0, sticky=tk.W)
+username_entry = tk.Entry(connection_frame)
+username_entry.grid(row=2, column=1, padx=5)
+
+connect_button = tk.Button(connection_frame, text="Se connecter", command=connect_to_server)
+connect_button.grid(row=3, column=0, pady=10)
+
+disconnect_button = tk.Button(connection_frame, text="Déconnecter", command=on_closing)
+disconnect_button.grid(row=3, column=1, pady=10)
+
+communication_frame = tk.Frame(root)
+communication_frame.pack(padx=10, pady=10)
+
+communication_label = tk.Label(communication_frame, text="Communication:")
+communication_label.pack()
+
+communication_box = tk.Text(communication_frame, height=10, width=50)
+communication_box.pack()
+
+message_entry = tk.Entry(root, width=40)
+message_entry.pack(padx=10, pady=5)
+
+send_button = tk.Button(root, text="Envoyer", command=send_message)
+send_button.pack(padx=10, pady=5)
+
+users_frame = tk.Frame(root)
+users_frame.pack(padx=10, pady=10)
+
+users_label = tk.Label(users_frame, text="Utilisateurs connectés:")
+users_label.pack()
+
+users_list = tk.Listbox(users_frame, height=5, width=30)
+users_list.pack()
+
+root.mainloop()
\ No newline at end of file
-- 
GitLab