From 6c0c3f8747b7567de43862ee9b7e3413876b3663 Mon Sep 17 00:00:00 2001 From: Metatheria Date: Tue, 5 Jan 2021 17:13:39 +0100 Subject: [PATCH] =?UTF-8?q?Unicit=C3=A9=20du=20nom=20d'utilisateur=20+=20W?= =?UTF-8?q?IP=20d=C3=A9connexion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/ClientWindow.java | 5 ++ src/chat/Message.java | 26 +++++++--- src/chat/NetworkClient.java | 99 ++++++++++++++++++++++++------------- 3 files changed, 89 insertions(+), 41 deletions(-) diff --git a/src/chat/ClientWindow.java b/src/chat/ClientWindow.java index 7ed955f..f70ce08 100644 --- a/src/chat/ClientWindow.java +++ b/src/chat/ClientWindow.java @@ -58,6 +58,11 @@ public class ClientWindow implements ActionListener { { sendButton.addActionListener(this); messageField.addActionListener(this); + chatWindow.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + network.send(null); + } + }); sendPanel.add(messageField); diff --git a/src/chat/Message.java b/src/chat/Message.java index f8edf8a..5b01fcf 100644 --- a/src/chat/Message.java +++ b/src/chat/Message.java @@ -1,15 +1,29 @@ package chat; public class Message { - - private String msg = null; - public void setmsg(String msg) + private String text; + private String author; + + public Message(String in_text, String in_author) { - this.msg = msg; + text = in_text; + author = in_author; } - public String getmsg() + public void setText(String new_text) { - return msg; + text = new_text; + } + public String getText() + { + return text; + } + public void setAuthor(String new_author) + { + author = new_author; + } + public String getAuthor() + { + return author; } } diff --git a/src/chat/NetworkClient.java b/src/chat/NetworkClient.java index 2e77ba5..0a25fac 100644 --- a/src/chat/NetworkClient.java +++ b/src/chat/NetworkClient.java @@ -12,39 +12,37 @@ import java.io.*; import java.util.*; import chat.User; +import chat.Message; class SendThread extends Thread { - String username; String address; - String message; + Message message; int port; - SendThread(String in_username, String in_address, String in_message, int in_port) + SendThread(Message in_message, String in_address, int in_port) { - username = in_username; - address = in_address; message = in_message; + address = in_address; port = in_port; } public void run() { Socket link; boolean connected = false; - PrintWriter out; + ObjectOutputStream out; while(!connected) { try { link = new Socket(address, port); - out = new PrintWriter(link.getOutputStream(),true); - out.println(username + " : " + message); - + out = new ObjectOutputStream(link.getOutputStream()); + out.writeObject(message); connected = true; } catch(IOException e) { - System.out.println("nik1!"); + e.printStackTrace(); connected = false; } } @@ -56,10 +54,13 @@ class ReceiveThread extends Thread { int port; JTextArea displayArea; - ReceiveThread(int in_port, JTextArea in_displayArea) + List known_users; + + ReceiveThread(int in_port, JTextArea in_displayArea, List in_known_users) { port = in_port; displayArea = in_displayArea; + known_users = in_known_users; } public void run() { @@ -70,12 +71,31 @@ class ReceiveThread extends Thread { while(!exit) { - Socket link = servSocket.accept(); - BufferedReader in = new BufferedReader(new InputStreamReader(link.getInputStream())); - String message = in.readLine(); - displayArea.append(message + "\n"); - displayArea.setCaretPosition(displayArea.getDocument().getLength()); - link.close(); + try + { + Socket link = servSocket.accept(); + ObjectInputStream in = new ObjectInputStream(link.getInputStream()); + Message message = (Message) in.readObject(); + if(message.getText() != null) + { + displayArea.append(message.getAuthor() + " : " + message.getText() + "\n"); + } + else + { + displayArea.append(message.getAuthor() + " has left the chat.\n"); + for(int i = 0;i < known_users.size();i ++) + { + if (known_users.get(i).getName().equals(message.getAuthor())) + known_users.remove(i); + } + } + displayArea.setCaretPosition(displayArea.getDocument().getLength()); + link.close(); + } + catch(Exception e) + { + + } } } @@ -99,6 +119,7 @@ class ConnectionListenerThread extends Thread { public void run() { boolean exit = false; + boolean accepted = true; byte[] buffer = new byte[100]; DatagramPacket request = new DatagramPacket(buffer, buffer.length); DatagramPacket responsePacket; @@ -139,11 +160,20 @@ class ConnectionListenerThread extends Thread { response1 = bStream.toByteArray(); responsePacket = new DatagramPacket(response1, response1.length, clientAddress, 1337); responseSocket.send(responsePacket); - if(known_users.indexOf(new User(username, clientAddress.getHostAddress())) == -1) + + accepted = true; + for(User a:known_users) + { + accepted = accepted && (!username.equals(a.getName())); + } + if(accepted) { known_users.add(new User(username, clientAddress.getHostAddress())); } - + else + { + System.out.println("Username already taken"); + } } catch(SocketTimeoutException e) {} } @@ -183,6 +213,7 @@ public class NetworkClient { boolean connect(String username) { + boolean nameAvailable = true; boolean connected = false; DatagramSocket connectionSocket; DatagramSocket userListSocket; @@ -223,26 +254,31 @@ public class NetworkClient { userList = (ArrayList) userListStream.readObject(); - if (userList.indexOf(user) != -1) - connected = false; - else + for(User a:userList) + { + nameAvailable = nameAvailable && (!username.equals(a.getName())); + } + if(nameAvailable) { - System.out.println(userList.size() + " users currently connected"); + System.out.println(userList.size() + " users currently connected"); for(int i = 0;i < userList.size();i ++) { System.out.println(userList.get(i).getName() + " : " + userList.get(i).getAddress()); known_users.add(userList.get(i)); } - known_users.add(new User(username, "25.67.234.235")); + known_users.add(new User(username, "25.68.185.103")); connected = true; } } catch(SocketTimeoutException e) { - known_users.add(new User(username, "25.67.234.235")); + known_users.add(new User(username, "25.68.185.103")); System.out.println("Reply timed out"); connected = true; } + + connectionSocket.close(); + userListSocket.close(); } catch (SocketException e2) { @@ -254,13 +290,9 @@ public class NetworkClient { } if(connected) - { + { user.setName(username); - ReceiveThread t2 = new ReceiveThread(1237, chatText); - for(User a:known_users) - { - System.out.println(a.getName() + ":" + a.getAddress()); - } + ReceiveThread t2 = new ReceiveThread(1237, chatText, known_users); ConnectionListenerThread t3 = new ConnectionListenerThread(known_users); t2.start(); @@ -274,11 +306,8 @@ public class NetworkClient { { for(User recipient:known_users) { - if(recipient != user) - { - SendThread t1 = new SendThread(user.getName(), recipient.getAddress(), message, 1237); + SendThread t1 = new SendThread(new Message(user.getName(), message), recipient.getAddress(), 1237); t1.start(); - } } } }