diff --git a/Implementation/src/ChatApp.class b/Implementation/src/ChatApp.class index 02dee82..1f60f61 100644 Binary files a/Implementation/src/ChatApp.class and b/Implementation/src/ChatApp.class differ diff --git a/Implementation/src/ChatApp.java b/Implementation/src/ChatApp.java index af99313..34a02c8 100644 --- a/Implementation/src/ChatApp.java +++ b/Implementation/src/ChatApp.java @@ -15,7 +15,18 @@ public class ChatApp { /* Liste des utilisateurs actifs */ private ListUtilisateurs actifUsers ; + private static ArrayList ListPort = new ArrayList(); + + + + + + + public static ArrayList getListPort() { + return ListPort; + } + /* ChatApp est associé à un utilisateur */ private Utilisateur me; @@ -52,8 +63,10 @@ public class ChatApp { InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER // Message que l'on envoie à tous les utilisateurs actifs String broadcastMessage = "Modification Pseudo\n" + this.getMe().getPseudo() + "\n" + nouveau + "\n"; - Integer port = 1234 ; - UDPEchange.connexion(broadcastAdress,broadcastMessage, port); + for(Integer p : ListPort ) { + Integer port = p ; + UDPEchange.connexion(broadcastAdress,broadcastMessage, port); + } } @@ -67,8 +80,10 @@ public class ChatApp { InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER // Message que l'on envoie à tous les utilisateurs actifs String broadcastMessage = "Connexion\n" + this.getMe().toString() ; - Integer port = 1234 ; - UDPEchange.connexion(broadcastAdress,broadcastMessage, port); + for(Integer p : ListPort ) { + Integer port = p ; + UDPEchange.connexion(broadcastAdress,broadcastMessage, p); + } } /** @@ -81,21 +96,26 @@ public class ChatApp { InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER // Message que l'on envoie à tous les utilisateurs actifs String broadcastMessage = "Deconnexion\n" + this.getMe().toString() ; - Integer port = 1234 ; - UDPEchange.connexion(broadcastAdress,broadcastMessage, port); + for(Integer p : ListPort ) { + Integer port = p ; + UDPEchange.connexion(broadcastAdress,broadcastMessage, port); + } } public static void main (String[] args) throws IOException { //Integer p = 2345 ; ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ; - + ListPort.add(1234); + ListPort.add(3000); + ListPort.add(4000); + ExecutorService exec = Executors.newFixedThreadPool(1000); + exec.submit(new Runner(app)); try { app.connexion(); } catch (IOException e) { e.printStackTrace(); } - ExecutorService exec = Executors.newFixedThreadPool(1000); - exec.submit(new Runner(app)); + if (app.getMe().getPort() == 4000) { try { Thread.sleep(2000); @@ -124,6 +144,7 @@ public class ChatApp { public ListUtilisateurs getActifUsers() { return actifUsers; } + } class Runner implements Runnable { ChatApp app ; diff --git a/Implementation/src/ListUtilisateurs.class b/Implementation/src/ListUtilisateurs.class index 1e90913..184b669 100644 Binary files a/Implementation/src/ListUtilisateurs.class and b/Implementation/src/ListUtilisateurs.class differ diff --git a/Implementation/src/ListUtilisateurs.java b/Implementation/src/ListUtilisateurs.java index 1a07621..f87874c 100644 --- a/Implementation/src/ListUtilisateurs.java +++ b/Implementation/src/ListUtilisateurs.java @@ -13,7 +13,11 @@ public class ListUtilisateurs { * @param u on va rajouter cet utilisateur dans la liste */ public void addList(Utilisateur u) { - this.actifUsers.add(u); + if((verifierUnicite(u.getPseudo()))) { + this.actifUsers.add(u); + } + + } /** diff --git a/Implementation/src/Runner.class b/Implementation/src/Runner.class index 1de11c3..79d3203 100644 Binary files a/Implementation/src/Runner.class and b/Implementation/src/Runner.class differ diff --git a/Implementation/src/RunnerUDP.class b/Implementation/src/RunnerUDP.class index 5a2c750..2f287a6 100644 Binary files a/Implementation/src/RunnerUDP.class and b/Implementation/src/RunnerUDP.class differ diff --git a/Implementation/src/UDPEchange.class b/Implementation/src/UDPEchange.class index 6643f06..729a13f 100644 Binary files a/Implementation/src/UDPEchange.class and b/Implementation/src/UDPEchange.class differ diff --git a/Implementation/src/UDPEchange.java b/Implementation/src/UDPEchange.java index d9fad55..2fc7c7b 100644 --- a/Implementation/src/UDPEchange.java +++ b/Implementation/src/UDPEchange.java @@ -32,7 +32,12 @@ public class UDPEchange { DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLoopbackAddress(), port ); socket.send(packet); socket.close(); + System.out.println("***********Message envoye***********"); + System.out.println("Dest Ip: " + broadcastAdress.toString()); + System.out.println("Dest port: " + port.toString()); + System.out.println("Contenu: "); System.out.println(broadcastMessage); + System.out.println("************************************"); } /** @@ -49,11 +54,12 @@ public class UDPEchange { DatagramSocket socket = null; ExecutorService exec = Executors.newFixedThreadPool(1000); try { - socket = new DatagramSocket(1234); + socket = new DatagramSocket(app.getMe().getPort()); } catch (SocketException e1) { e1.printStackTrace(); } byte buffer[] = new byte[1024]; + System.out.println("Ecoute sur le port: "+app.getMe().getPort().toString()); while(true) { DatagramPacket data = new DatagramPacket(buffer,buffer.length); @@ -61,8 +67,9 @@ public class UDPEchange { socket.receive(data); } catch (IOException e) { e.printStackTrace(); - } + } // Un thread est lancé à chaque reception d'un message + System.out.println("Message recu!"); exec.submit(new RunnerUDP(data,app)); } } @@ -74,7 +81,12 @@ public class UDPEchange { DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLoopbackAddress(), port ); socket.send(packet); socket.close(); + System.out.println("***********Message envoye***********"); + System.out.println("Dest Ip: " + broadcastAdress.toString()); + System.out.println("Dest port: " + port.toString()); + System.out.println("Contenu: "); System.out.println(broadcastMessage); + System.out.println("************************************"); } } @@ -104,8 +116,16 @@ class RunnerUDP implements Runnable { public void run() { System.out.println("Thread started"); String received = new String(data.getData(), 0, data.getLength()); + System.out.println("***********Message recu***********"); System.out.println(received); + System.out.println("**********************************"); String Type = received.split("\n")[0]; + + //**************************************** + //***************************************** + //Demande de connexion + //**************************************** + //**************************************** if (Type.equals("Connexion")) { // un utilisateur vient d'arriver sur le reseau System.out.println("Reception d'une demande de connexion"); Utilisateur u = Utilisateur.stringToUtilisateur(received.split("\n")[1]); @@ -121,6 +141,7 @@ class RunnerUDP implements Runnable { } reponse += app.getMe().toString(); + try { UDPEchange.envoiUnicast(u.getIp(),reponse,u.getPort()); }catch(IOException e) @@ -130,9 +151,31 @@ class RunnerUDP implements Runnable { ( app.getActifUsers() ).afficherListeUtilisateurs(); } + //**************************************** + //***************************************** + //Reponse d'une connexion + //**************************************** + //**************************************** + if (Type.equals("Reponse Connexion")) { // Un utilisateur te repond suite à ta demande de connexion - ( app.getActifUsers() ).afficherListeUtilisateurs(); + + if((received.split("\n")[1]).equals("true")) { + Utilisateur u = Utilisateur.stringToUtilisateur(received.split("\n")[2]); + app.getActifUsers().addList(u); + app.getActifUsers().afficherListeUtilisateurs(); + } + else { + System.out.println("Pseudo deja pris"); + System.out.println("Connexion echoue"); + } } + + //**************************************** + //***************************************** + //Demande de modification d'un pseudo + //**************************************** + //**************************************** + if (Type.equals("Modification Pseudo")) { if(( app.getActifUsers() ).verifierUnicite(received.split("\n")[2])) { ( app.getActifUsers() ).modifierList(received.split("\n")[1],received.split("\n")[2]); @@ -155,14 +198,35 @@ class RunnerUDP implements Runnable { } ( app.getActifUsers() ).afficherListeUtilisateurs(); } + //**************************************** + //***************************************** + //Mauvais choix d'un pseudo + //**************************************** + //**************************************** + + if (Type.equals("Mauvais Choix Pseudo")) { System.out.println("Ce choix de pseudo est déjà pris il te faut en choisir un autre"); } + + //**************************************** + //***************************************** + //Bon choix d'un pseudo + //**************************************** + //**************************************** + if (Type.equals("Bon Choix Pseudo")) { ( app.getActifUsers() ).supprimerList(app.getMe()); app.getMe().setPseudo(received.split("\n")[1]); ( app.getActifUsers() ).addList(app.getMe()); } + + //**************************************** + //***************************************** + //Demande d'une deconnexion + //**************************************** + //**************************************** + if (Type.equals("Deconnexion")) { ( app.getActifUsers() ).supprimerList(Utilisateur.stringToUtilisateur(received.split("\n")[1])); }