From ae3dba26cbf3e14b01c9b880872f09cb1108fe3f Mon Sep 17 00:00:00 2001 From: alartigu Date: Mon, 30 Nov 2020 18:00:26 +0100 Subject: [PATCH] Verification pseudo --- Implementation/src/ChatApp.class | Bin 2767 -> 4607 bytes Implementation/src/ChatApp.java | 109 +++++++++++++++++++++++++-- Implementation/src/Runner.class | Bin 371 -> 579 bytes Implementation/src/RunnerUDP.class | Bin 1625 -> 3486 bytes Implementation/src/UDPEchange.class | Bin 1683 -> 1823 bytes Implementation/src/UDPEchange.java | 62 ++++++++++++++- Implementation/src/Utilisateur.class | Bin 2197 -> 2398 bytes Implementation/src/Utilisateur.java | 9 ++- 8 files changed, 168 insertions(+), 12 deletions(-) diff --git a/Implementation/src/ChatApp.class b/Implementation/src/ChatApp.class index 2dda9dbde63263d75684daf44a6ed93d6f4409da..19b60108fdafaa091b3ce3e72067f38132b877b3 100644 GIT binary patch literal 4607 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 diff --git a/Implementation/src/ChatApp.java b/Implementation/src/ChatApp.java index 81239e8..b6dbb73 100644 --- a/Implementation/src/ChatApp.java +++ b/Implementation/src/ChatApp.java @@ -36,7 +36,7 @@ public class ChatApp { } //ip.getHostAddress(); this.me = new Utilisateur(pseudo,port,ip); - this.actifUsers.add(me); + this.actifUsers.add(getMe()); } /** * Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers' @@ -46,14 +46,52 @@ public class ChatApp { public void addList(Utilisateur u) { this.actifUsers.add(u); } - + public Utilisateur getPseudoList(String pseudo) { + for(Utilisateur elem: this.actifUsers) + { + if (elem.getPseudo().equals(pseudo) ) { + return elem ; + } + } + return null ; + } /** * Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur * * @param u on va supprimer cet utilisateur dans la liste */ public void supprimerList(Utilisateur u) { - this.actifUsers.remove(u); + Boolean Sup = false ; + for(Utilisateur elem: this.actifUsers) + { + if (elem.equals(u) ) { + this.actifUsers.remove(elem); + Sup = true ; + this.afficherListeUtilisateurs(); + } + } + if (!Sup) { + System.out.println("Tentative de retirer un objet non contenu dans la liste"); + } + } + + /** + * Modifie le nom d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers' + * + * @param ancien correspond au pseudo remplacer + * @param nouveau correspond au nouveau pseudo + */ + public void modifierList(String ancien , String nouveau) { + for(Utilisateur elem: this.actifUsers) + { + if (ancien.equals( elem.getPseudo() ) ) { + this.actifUsers.remove(elem); + elem.setPseudo(nouveau);; + this.addList(elem); + + } + } + this.afficherListeUtilisateurs(); } /** @@ -71,6 +109,21 @@ public class ChatApp { return true; } + /** + * Modification du pseudo de l'utilisateur + * Envoie en broadcast son ancien pseudo et son nouveau + * + * @param nouveau correspond au nouveau pseudo + */ + public void modifierPseudo(String nouveau) throws IOException { + // @ de broadcast du réseau de l'utilisateur me + 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); + } + public void afficherListeUtilisateurs() { System.out.println ("Liste des utilisateurs actifs : "); for(Utilisateur elem: this.actifUsers) @@ -79,18 +132,35 @@ public class ChatApp { } } - + /** + * Methode appelée lors de la connexion d'un nouvel utilisateur. + * Il va prévenir les utilisateurs du réseau de son arrivée. + * + */ public void connexion() throws IOException { // @ de broadcast du réseau de l'utilisateur me InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER // Message que l'on envoie à tous les utilisateurs actifs - String broadcastMessage = "Connexion\n" + this.me.toString() ; + String broadcastMessage = "Connexion\n" + this.getMe().toString() ; Integer port = 1234 ; UDPEchange.connexion(broadcastAdress,broadcastMessage, port); } + /** + * Methode appelée lors de la déconnexion de l'utilisateur. + * Il va prévenir les utilisateurs du réseau de son départ. + * + */ + public void deconnexion() throws IOException { + // @ de broadcast du réseau de l'utilisateur me + 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); + } - public static void main (String[] args) { + public static void main (String[] args) throws IOException { //Integer p = 2345 ; ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ; @@ -100,7 +170,30 @@ public class ChatApp { e.printStackTrace(); } ExecutorService exec = Executors.newFixedThreadPool(1000); - exec.submit(new Runner(app)); + exec.submit(new Runner(app)); + if (app.getMe().getPort() == 4000) { + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + app.modifierPseudo("Jean"); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + app.modifierPseudo("Eliot"); + /*try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + app.deconnexion(); */ + } + } + public Utilisateur getMe() { + return me; } } @@ -111,7 +204,9 @@ class Runner implements Runnable { } @Override public void run() { + if (app.getMe().getPort() != 4000) { UDPEchange.ecouteUDP(app); + } } } diff --git a/Implementation/src/Runner.class b/Implementation/src/Runner.class index 7f2cbdde28d2e007769fbdd8abf737234192e6d9..a7108d5ab347dca014639192d1f2fd5cf95a1938 100644 GIT binary patch delta 344 zcmZ8cJ4?e*7(KUXy*5o-O0CsKt&didsB{y=NpvY#5Pa-cNnfULYAN6gw3cqU8zSX|;W6J9ZqdLFbs#FpU|8 z(tk%iU>J3Mc__RA{ZRL`rD?fDDMVJ5p delta 140 zcmX@i@|lV2)W2Q(7#J8V8Kfq1rA-!K)L;~uY{_Ugxt>v3T$q6oD8w6qk8ULMRli6%1O}kLq0MeV|s6;i~>?n!o%-I--( zHYQ@Zh{(MZ1fi&ff*SEkfo^N6Rp|$xN5An+{U`kD7x8yycDuXX;Pdo3*?Dj0eSh!m z^l$%NyA0qST#2CpjT$04n$Rq;X~A4F`?97z-*;qoL8g3x=Dn6}`TGSLJG+uCh@wS9 zOveW30xgpT+m`Op0}}#~wCS4y?PGxnTl#$mNSJrc+=Q80l>U&?-Ke7tn`q0-=czt6 znlb(1e4e~GuG4V6jxD&M#*L{J&zCuBI0ZVhCA4lieG{%_`%}Iv&D>BF+XOaFXZVpe zJl}MEnU3K`+@#@V9iPK30@npz)#?dod1WPQ({N{KIS8F*Eqi{bE2+V#btYiM@Oj*- zVW*DU&>^t(GXkdhdFd+<2u^3$%!tzK)X{}*hECR)wCDXy0BjQM z2|djEP}c)d3<>OMpwWzMwI>aUTi7~O~c8t&EcB@7E}IOAclQ7sN)d69AY@($wJx@xW2QiKKd9E z_=<+F>KMZ~aV=GwK--dZtvQR8Yg;MHm!AP>mBkUq$x726is1+*G<;3RB&Gy5SNf$S zA)wEOvPm;rpk=lV!8|IkBlMNnEtp2$m7cVHBW>EAku?n>=F2#H@|cdV<9=3E&Rmp? zJ7xOEEI-3vENt6nzB<+gui{9ldZU;T*gL$yz6p|N*iKCr< z;katDl*NMykg$C@FI~#|C}>#H@hvP1#5m~=rZOCl3{RK#l4Gd~G8HcSOU_?=UA?ze zl=3}l)O@>YN+pgQTrPE96yFiJiMPs>YP;;N;94VHFmjB>oRlM0JCgaf@LEKhW{2 zioGou=2Jem&9rN#WE4MSTF1@8l4*IyXvVRY%dtiA21mwvtSH_T7#`(#3*-rSKJeO* z9^2^3dka_IX7AFTl{I{6%$e*iX$R7tffA^$K|! z%7vh+0zRwb9kr@jyfRc#{FL+bfV?_tHT;}YvC`^l{hG5`7UOMI)pyO_y}D$(l3YZi zPFl6*m}Seuh1{%kr$YmcZh_6y8o)Ph=1bJrlv8k1@{pzOXscBJ9me(yAymiqk83xsG`Cnk=uodK05&Hao@Dz)e(SA&NQfN*RmdA~&b--GchP zCeR>66n|h+>T)gEHwpDR8qJ!XCp`^+Vw&o}ST9Bme-XIl|BKR%5D*xAS2b`3|BUA* z^)BNUfqG`~RP-jS^85wA?&5c&;&oqu=}U-C?z(`UF|vEe?TOz}#O}ua@!t3s zin#kUUQ~L6S2>aXi`aWOJ~9}gZtLwu94O+xA`ZWatx9m3g6)wtB!R)mDsEP^2S_Uk zA6L9@Dqee_UxZnNTth~YXl$`voz6vgt7si;QreG{w2L^=8-F}-DWu1{KR`#?l-AQ9!s;34}t#;3uVDp*Imm@pcXWcyIjOKy8a6m!+5rs-9zk zoW*b1!YiUf>=6U}n-o%HIA|M!8u=KzStAyUZh^1KMRXvGKCa#Y*n9vwd}`$}!R>0o zrId#PmT-dW^C>LjBp#vl6SV&XZ+H|R;&EKUllYk2zjN1of@knAJd1zhIicZsu@x_f z4xAKwxF81bk{HA(aW7sGBY0Iz;x&=P>q2s3XE@Ina9TJVyGuAD9>ZJWX`B_O@Qyfx zcg6c0q?b86|B6-d4@U7TM(_~YKBaR_8loDu2mki*1h&m;SZVnWn#q^-d^)y5X2Yj^ z{nsg%n9ZB+zL7xwn%6YoHw+j2-$(?%V;h|h&I`f$`{2BUKaw9K?=t>ODBAxA0wS?{ delta 493 zcmXYtO;1xn6o#LPZDuBmV~TujqusVI;*GYU%tXL>E;!FSwD*!CBb=ei6-_PRDwA%(n<^TvGo_gh zxWP?@uB}DAYNz8yv-^+sxmy9Z$tg-vs}(obY_}dKJv-lv*W)DW+2`FvbJu;+n}r3# zBOYs>^c^j_Xa3iN%L>2ovSTab6{QHK#ap+w9wmvDsitDkefNv*tzXD#tm44`r*>cR zVfhXoyBQ#mU&1b_5k#?r8Huy*SH5z5POy-y#2JaRpVECENcP3yL%B<$gXk*JT9NtE EU)4igCjbBd diff --git a/Implementation/src/UDPEchange.class b/Implementation/src/UDPEchange.class index 72b05d2e2786d3d7cb665a5a81ba99ecab038716..6643f065208e65a06b809abf901fff8a54e21373 100644 GIT binary patch delta 130 zcmbQtJD-p1)W2Q(7#J8V8L~HWt!3fmNzE(E&kW7WOinB=nY@)ni;-pX1C~{cvYZSV z4Dk$13^72(sSIpD$iQH_n}I!YI|HZRWIa|hV>t$PpqK{(2ZJXAAA=WzGJ`jRCW8-y cE`u+F34iQPCWcG^7SIb` diff --git a/Implementation/src/UDPEchange.java b/Implementation/src/UDPEchange.java index 4dbf208..f572c76 100644 --- a/Implementation/src/UDPEchange.java +++ b/Implementation/src/UDPEchange.java @@ -64,7 +64,17 @@ public class UDPEchange { } // Un thread est lancé à chaque reception d'un message exec.submit(new RunnerUDP(data,app)); - } + } + } + + public static void envoiUnicast( InetAddress broadcastAdress , String broadcastMessage , Integer port) throws IOException { + // Envoie en broadcast à tous les utilsateurs + DatagramSocket socket = new DatagramSocket(); + byte[]buffer = broadcastMessage.getBytes(); + DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLoopbackAddress(), port ); + socket.send(packet); + socket.close(); + System.out.println(broadcastMessage); } } @@ -97,18 +107,64 @@ class RunnerUDP implements Runnable { System.out.println(received); String Type = received.split("\n")[0]; if (Type.equals("Connexion")) { // un utilisateur vient d'arriver sur le reseau - app.addList(Utilisateur.stringToUtilisateur(received.split("\n")[1])); + System.out.println("Reception d'une demande de connexion"); + Utilisateur u = Utilisateur.stringToUtilisateur(received.split("\n")[1]); + String reponse = "Reponse Connexion\n"; + if (!app.verifierUnicite(u.getPseudo())) { + System.out.println("Pseudo deja present dans la liste"); + reponse += "false\n"; + } + else { + System.out.println("Ajout d'un nouvel utilisateur dans la liste des Utilisateurs"); + app.addList(u); + reponse += "true\n"; + + } + reponse += app.getMe().toString(); + try { + UDPEchange.envoiUnicast(u.getIp(),reponse,u.getPort()); + }catch(IOException e) + { + System.out.println("Echec de l'envoi du message"); + } + app.afficherListeUtilisateurs(); } if (Type.equals("Reponse Connexion")) { // Un utilisateur te repond suite à ta demande de connexion app.afficherListeUtilisateurs(); } if (Type.equals("Modification Pseudo")) { + if(app.verifierUnicite(received.split("\n")[2])) { + app.modifierList(received.split("\n")[1],received.split("\n")[2]); + Utilisateur Destination = app.getPseudoList(received.split("\n")[1]); + String Message = "Bon Choix Pseudo\n" + received.split("\n")[2] ; + try { + UDPEchange.envoiUnicast(Destination.getIp(),Message, 1234); + } catch (IOException e) { + e.printStackTrace(); + } + } + else { + Utilisateur Destination = app.getPseudoList(received.split("\n")[1]); + String Message = "Mauvais Choix Pseudo\n" ; + try { + UDPEchange.envoiUnicast(Destination.getIp(),Message, 1234); + } catch (IOException e) { + e.printStackTrace(); + } + } app.afficherListeUtilisateurs(); } + if (Type.equals("Mauvais Choix Pseudo")) { + System.out.println("Ce choix de pseudo est déjà pris il te faut en choisir un autre"); + } + if (Type.equals("Bon Choix Pseudo")) { + app.supprimerList(app.getMe()); + app.getMe().setPseudo(received.split("\n")[1]); + app.addList(app.getMe()); + } if (Type.equals("Deconnexion")) { app.supprimerList(Utilisateur.stringToUtilisateur(received.split("\n")[1])); - app.afficherListeUtilisateurs(); } } } diff --git a/Implementation/src/Utilisateur.class b/Implementation/src/Utilisateur.class index 7c4a8d12602a9752492665edb5fe73285a63d8e1..958fe6a429238eaa32456b74190fe51ac8db4a3c 100644 GIT binary patch delta 723 zcmZuv-)qxQ7(KU5lQs*hooltwjk;Nvb;XGwB7q?a^Cj+w>t@&aD_yT$YSwg3G8Kg3 zgMWZreAs_sL5KL@lTW_;>YpNh$pS0Ghn)M}bH8)Gb1(Un`!k{b`uqI{fIE0QRJ+L| z6=^)wumYVS)8YP_$Ah-3;uh94tm6@b%nt&~@fh;D*|iR>MaSxO7FSzczUv$FO%-)) zD%jF+1CJSUXD##=@z!4v$pR<%jWBurcWmbMy zPNUDDvc5a;LFOj9{6ey3_<88D=PL+g(05cY1}^=DR(|nnVROH$F23)x;8Ooie=?`CCpGDN8l=w zs9+q|P$EHWj+UwYj-RENWZ1n`@0(~b~ n{f3S6k(Ovun~ZK_0Q4GK8eTL$b)Hx->A@u|yb?O+Lor@|A~uF&ZvN9HVNFJiv2L z2Zp$0!j(3~5m;yeJTmzRPphpG>WXz!q=))fkRbdY=I?}=cJ+dfum`hMTM diff --git a/Implementation/src/Utilisateur.java b/Implementation/src/Utilisateur.java index 4fd57e7..de29299 100644 --- a/Implementation/src/Utilisateur.java +++ b/Implementation/src/Utilisateur.java @@ -1,7 +1,7 @@ import java.net.InetAddress; import java.net.UnknownHostException; -public class Utilisateur { +public class Utilisateur extends Object { private String pseudo ; private Integer port; @@ -40,7 +40,7 @@ public class Utilisateur { return s; } - public static Utilisateur stringToUtilisateur(String s){ + public static Utilisateur stringToUtilisateur(String s) { String name = ""; Integer port = 0; String ip = "" ; @@ -56,5 +56,10 @@ public class Utilisateur { } return user; } + + + public Boolean equals(Utilisateur u) { + return this.getPseudo().equals( u.getPseudo() ) ; + } }