From 27abecae5d512ce73a051f0b3ed24a6a903a7517 Mon Sep 17 00:00:00 2001 From: alartigu Date: Fri, 4 Dec 2020 18:25:38 +0100 Subject: [PATCH] =?UTF-8?q?Amelioration=20des=20m=C3=A9thodes=20de=20conne?= =?UTF-8?q?xion=20et=20de=20modification=20de=20pseudo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Implementation/src/ChatApp.class | Bin 4542 -> 4573 bytes Implementation/src/ChatApp.java | 186 ++++++++-------- Implementation/src/ListUtilisateurs.class | Bin 2140 -> 2224 bytes Implementation/src/ListUtilisateurs.java | 4 + Implementation/src/Runner.class | Bin 371 -> 371 bytes Implementation/src/RunnerUDP.class | Bin 4134 -> 3838 bytes Implementation/src/UDPEchange.class | Bin 5571 -> 5244 bytes Implementation/src/UDPEchange.java | 250 ++++++++++++---------- Implementation/src/Utilisateur.class | Bin 2578 -> 2578 bytes 9 files changed, 230 insertions(+), 210 deletions(-) diff --git a/Implementation/src/ChatApp.class b/Implementation/src/ChatApp.class index ebf46a2415807593ba3593ceb6b06b7209fa8fe4..896d42cbe69272aa89a9fab3aa071a731f47dc6f 100644 GIT binary patch literal 4573 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 -* Classe récapitulant toutes les actions possibles pour un utilisateur +* Classe recapitulant toutes les actions possibles pour un utilisateur *

*/ @@ -24,19 +24,11 @@ public class ChatApp { /* Liste des utilisateurs actifs */ private ListUtilisateurs actifUsers ; - private static ArrayList ListPort = new ArrayList(); + + /* Map on l'on stocke localement les historiques des messages */ private Map mapHistorique ; - - - - - - public static ArrayList getListPort() { - return ListPort; - } - - /* ChatApp est associé à un utilisateur */ + /* ChatApp est associe a un utilisateur */ private Utilisateur me; /** @@ -50,17 +42,21 @@ public class ChatApp { // Recuperer adresse IP de l'utilisateur InetAddress ip = null ; try { - //ip = InetAddress.getByName("192.168.1.72"); ip = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } - //ip.getHostAddress(); this.me = new Utilisateur(pseudo,port,ip); this.actifUsers.addList(getMe()); this.mapHistorique = new HashMap() ; } + /** + * Mettre a jour dans Maphistorique, l'historique avec un utilisateur dont le nom est pseudo + * + * @param pseudo Pseudo de l'utilisateur + * @param h nouvel Historique entre les deux utilisateurs + */ public void majHistorique(String pseudo,Historique h) { getMapHistorique().put(h.getUser2().getPseudo(),h); } @@ -74,112 +70,100 @@ public class ChatApp { * @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().toString() + "\n" + nouveau + "\n"; - /*for(Integer p : ListPort ) { - if(!(p.equals(this.getMe().getPort()))) - { - UDPEchange.connexion(broadcastAdress,broadcastMessage, p); - } - }*/ - UDPEchange.connexion(broadcastAdress,broadcastMessage, 1234); + String broadcastMessage = "Demande Modification Pseudo\n" + this.getMe().toString() + "\n" + nouveau + "\n"; + UDPEchange.EnvoiBroadcast(broadcastMessage); + try { + Thread.sleep(1000); + /* L'utilisateur doit attendre la reponse de tous les utilisateurs connectes + * pour savoir si son pseudo est accepte + */ + } catch (InterruptedException e) { + e.printStackTrace(); + } + if (UDPEchange.getPseudoValide()) { + System.out.println("Modification pseudo reussie"); + //Envoi un msg en broadcast a tout les utilisateurs pour les prevenir de son nouveau pseudo// + broadcastMessage = "Modification pseudo reussie\n" + this.getMe().toString() + "\n" + nouveau + "\n"; + UDPEchange.EnvoiBroadcast(broadcastMessage); + //-------Change son propre nom d'utilisateur-------// + this.getActifUsers().modifierList(this.getMe().getPseudo(), nouveau); + this.getMe().setPseudo(nouveau); + System.out.println("Changement pseudo accepte, nouvelle liste des utilisateurs actifs:"); + this.getActifUsers().afficherListeUtilisateurs(); + } + else + { + System.out.println("Connexion echoue"); + System.exit(1) ; // A MODIFIER NORMALEMENT ON LUI DEMANDE DE CHOISIR UN NV MDP + } } /** - * Methode appelée lors de la connexion d'un nouvel utilisateur. - * Il va prévenir les utilisateurs du réseau de son arrivée. + * Methode appelee lors de la connexion d'un nouvel utilisateur. + * Il va prevenir les utilisateurs du reseau de son arrivee. * */ 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.getMe().toString() ; - /*for(Integer p : ListPort ) { - if(!(p.equals(this.getMe().getPort()))) - { - UDPEchange.connexion(broadcastAdress,broadcastMessage, p); + UDPEchange.EnvoiBroadcast(broadcastMessage); + try { + Thread.sleep(1000); // L'utilisateur doit attendre la reponse de tous les utilisateurs connectes + } catch (InterruptedException e) { + e.printStackTrace(); } - }*/ - UDPEchange.connexion(broadcastAdress,broadcastMessage, 1234); + if (UDPEchange.getConnecte()) { + System.out.println("Connexion reussie"); + } + else + { + System.out.println("Connexion echoue"); + System.exit(1) ; // A MODIFIER NORMALEMENT ON LUI DEMANDE DE CHOISIR UN NV MDP + } } /** - * Methode appelée lors de la déconnexion de l'utilisateur. - * Il va prévenir les utilisateurs du réseau de son départ. + * Methode appelee lors de la deconnexion de l'utilisateur. + * Il va prevenir les utilisateurs du reseau de son depart. * */ 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() ; - /*for(Integer p : ListPort ) { - if(!(p.equals(this.getMe().getPort()))) - { - UDPEchange.connexion(broadcastAdress,broadcastMessage, p); - } - }*/ - UDPEchange.connexion(broadcastAdress,broadcastMessage, 1234); - } - - public static void main (String[] args) throws IOException { - //Integer p = 2345 ; - ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ; - InetAddress localHost = InetAddress.getLocalHost() ; - System.out.println("Mon adress: "+ localHost.toString()); - ListPort.add(1234); - ListPort.add(3000); - ListPort.add(4000); - /*for(InetAddress broadcastAddr : UDPEchange.listAllBroadcastAddresses()) { - System.out.println("Broadcast sent with address " + broadcastAddr.toString()); - }*/ - //InetAddress broadcastAddress = InterfaceAddress.getBroadcast(); - //System.out.println("Mon adresse:" + localHost.toString()); - ExecutorService exec = Executors.newFixedThreadPool(1000); - exec.submit(new Runner(app)); - try { - app.connexion(); - } catch (IOException e) { - e.printStackTrace(); - } - - if (app.getMe().getPort() == 4000) { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - app.modifierPseudo("Doudou"); - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - app.modifierPseudo("Eliot"); - /*try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - app.deconnexion(); */ - } + UDPEchange.EnvoiBroadcast(broadcastMessage); } + + /** + * Getter + * @return Utilisateur associee a ChatApp + */ public Utilisateur getMe() { return me; } - + + /** + * Getter + * @return Liste des utilisateurs actifs associee a ChatApp + */ public ListUtilisateurs getActifUsers() { return actifUsers; } - + + /** + * Getter + * @return la map des historiques + */ public Map getMapHistorique() { return mapHistorique; } + /** + * Obtenir l'historique entre deux utilisateurs + * @param pseudo Pseudo de l'utilisateur dont on souhaite obtenir l'historique + * @return Un historique + */ public Historique getHist(String pseudo) { Historique h = this.mapHistorique.get(pseudo); if( h != null) { @@ -190,9 +174,25 @@ public class ChatApp { return h ; } } - - - + + public static void main (String[] args) throws IOException { + ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ; + ExecutorService exec = Executors.newFixedThreadPool(1000); + exec.submit(new Runner(app)); + try { + app.connexion(); + } catch (IOException e) { + e.printStackTrace(); + } + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + app.modifierPseudo("Jean"); + + } } diff --git a/Implementation/src/ListUtilisateurs.class b/Implementation/src/ListUtilisateurs.class index 184b6698780150fa334194fb9e108118f8c6200f..e6a1cf678d19e09a025a9a34e668aa3285b4746a 100644 GIT binary patch delta 468 zcmY*VNlpS$5PhGfhqT0iMnTb_NI)b`3#Wv*5Emv!w}2qn3_>F!Q7+&a{vp`X#t`Fz z1GwP=?p$#IH-xD5n?&QLetuQGq29Z@bAS4Z2plk=fkB2swZP})Wme>I+0P0*B}cbji9NB28JZd zP(jkhE+{3Ed{j1BiCcK8OIaMF#1cICD@yVapGvOpBc22n8}F+LMxObiV+#M&%^vbhz_K*ajf5EG17?PM33c{{)z0Q zP6-%jLP5ZU#nadO=Avlnrs)b_-=%5?MUd{4ufX=cJ zkcEpJ3Ru7jmavL^7>PlSU@MezLuv(j@WO1_>QQ-XZRCQ+4kEvpR&WV!6O5BN!+A)4 zTOP@(DvGwgRw*@yOjv(b2ib}Jh<1=94_Q(^od5s; diff --git a/Implementation/src/ListUtilisateurs.java b/Implementation/src/ListUtilisateurs.java index f87874c..d3fc8db 100644 --- a/Implementation/src/ListUtilisateurs.java +++ b/Implementation/src/ListUtilisateurs.java @@ -72,6 +72,10 @@ public class ListUtilisateurs { } } this.afficherListeUtilisateurs(); + } + + public Boolean appartient(Utilisateur u) { + return this.actifUsers.contains(u); } diff --git a/Implementation/src/Runner.class b/Implementation/src/Runner.class index 3f6e0cc50284c18f5cfd5eceef15759deb9609ee..1eb00b8d23e9886bd4924f7578b9b44348105f50 100644 GIT binary patch delta 37 tcmey&^qFac9wX;Q1{Q`*44e#`Cz~_s@^5EgXV}TW$RNSMz`(>H2>`!l2dDr5 delta 37 tcmey&^qFac9wX;T1{Q`>44e$7Cz~_s@}Fm5XSm3~$RNSMz`(>H2>{662p|9e diff --git a/Implementation/src/RunnerUDP.class b/Implementation/src/RunnerUDP.class index 32bddcd94fb44a3c52c01dceeccbbe56e990dd5a..1d25cd3e6c954afadd07ebf4bd579c5a017e6685 100644 GIT binary patch delta 1261 zcmZuxYitx%6#mZa&ZD!_7Df=ZrR}C#Na@xe4Ke9Pqez3A02a}j2vH{OkWQex%RWeB zY*(vPMN#Ngv=otwPn z$=w>ss9lJ zkBTlORJw{V{&qVaize;RtXMQ^H#@PYh9?OAR3dF_cv75GCMjzStVM_TO)1k_@U($v zuue=<%QMdr3Tx~pE81X(=EfSFB~HDSVues`(oQ$TG^{7Ugb$4xo+nJ4Yo%9MPBJvB zG3GRnl5`zyc)`FXD1`iY!ilC9q^$a-cO~cYV7*I%a+aQ8h8zHLT)l0=c_c?i8)R(rDDHWk<*>`mX4!1 zrsB8(2XBiq{b=b)f=WxQWl3AtFi2d3Y~6YOE%L06zkf8$7OmR7IGi??% z#?{m+9K)*Y$NfFXjmUd2-h9|aaC#qdUEJlOJ#0SaBGQT36=s!-8U8Bsaq+t`bxL~= z%q)8~vwi(|svjb3KI>7JiaExVJLioYkgFnovoj)(DhB;7?sainC-Q^-0rrT9+ym9z z;N=d=tXAowIVgLM^oSBvTx<-R-JWt?R(WCdnDVG9AKC1QUNII}m`$~HY~2(#w|gR< z?VbPF-W4``y|^!I?iICp1(|)lkZ=O0aRzPFL0z?19D&R)TGqhV8fp zJ8&&_;s)%+E$Bln_F)lRG;u>LM?Y3#KUQOa|I0yi;}A0sGvf$nIL0|na+c#5;?)-z z#Ccw2e!vhBKBioJLX+_+mEtoh!{=0qb2I~A(e*e_x8iHM8yBbn-%umIrTg$5wc~qQ zg&(N{KT#KcVcS2`CS0T~1lmPJ10>NP`RFY9=}VI7BIR(SO^|e&D4BGn6r>WVl*%(w z1x=T3q%eC0W@Fr+Y+Y8NsVMQrOh%ya9u;jlmymN^-Z18?$VPei7I64iD1V@KBz6h< sB&~>Fg2SvP;SIdW-vaK@BixlIJUr#$J08A={12F*^X6%MgtG|#1!}!deE0g5?B<6|K@0JS$eZ`njId@H|$C7FU6?0558&!As(2SJ9wX z2p8RG1Vghz*_+vU zncY;wh|CO>-(MOGMs?Fv@h0kJyp^o^Huv`*%7nf{r~LmYsUq5CU1hwcyRroYMxRfGnc0ZXrnnjC3`W|<`lwi7%P_44$VWb6>@ zl+{^#RJ7xB8GAK^uusfzx8?8WTSKz~6{fB#_>y=W$z`(s6+t3W@U(7_MX#ka30)E`~=!^tJ0xuMMUrvQKcB9WCoD93i z#!WT2`#ig2)H(mF>EsDqH!W>$#%iF%!9{!yE|S1&K1WWk+63aV#VG>$}pun=Ik-aMsv3oOLuJJ{R?9% zlUZ6XnBulnzW&{@X*BcYoDKXocVa&dqMBCF8jADTPKW6Ts(IJR?ViT9EStcu19`A9 zB!*2Gjs(VFGsdG8H()EKV;g2*J1WtJ2e1Q+_=+s$<=0>rk8(HG;uD7N;e>m+*a0rL z4~JMg%Gz)E9;fgFIq@Uq;3pb@V^oOaRD@q>Bz~o<@H>^_6y1r_Wa1Bs#c+m}p@UZ7 zZ|)e}b0^iKi`ElS17%PfIcO(2nTO0wR60Tm9VIs%Cyh>0ANrH}N)qKs9vUPKpuy5` zDv-ugp){F>NH^2v(p@xCGH5in4$MS$7qf86P-Nt#KCwJYj?I)&?e2j4nyfB_&vTb@ z5QyC!a7kS}sh-%LPIvZSm^P5-znkkwJfKhcyqI6nXZ&uyNXY{!c`zjp;T!g=>^qF_ I96U4MKi31TfdBvi diff --git a/Implementation/src/UDPEchange.class b/Implementation/src/UDPEchange.class index 9e1c58ded28b443e034f962b4ff64d4b9c229dcf..80f5f66965ac4a582e33763281305cdecea98706 100644 GIT binary patch delta 2642 zcmZuz33yY-5&rk-N$=@th2#sY8ryR17+bb6*qj1FF&HrT;;_LSNoD(C8-%3jFyvIy z0)ey%b+;F^X+kfjY10@;eL)E+J(D&~lis0Cue3?;BRxU^cUHpC68!mlyE{8GJO9k= zzdBcOvCMe(^7t753)!>*V`s4)I;L>Az!`XJ%uIBL+XKPAZquNR4311>4ct@f$iY+% z(>QYB88|)Pk%#FT@;M4nIBHfqFEYzCVn&a(pNJPs@7Gvt?Tt!og+jj5tVvFfE*$l=E#u}vwK)B!(a_4V4(r8c z%L0pzjbccxShdE$Ol;!Vj1C5^KM+iqEjt);${NZWcLw?c)xkihr+Py?+863slnDiE zbZld=FAs;}W+>tJ>bQlWL@;ZCa9eFo1MfsYLnlWUx<#e6JF^r!B(NR^m7KO~=o5BZ zezF(4ID!(2D?-lW8{&bkT^pl;E>lN{A-BFOoQRv=SR(2Tn%+n_8uxo=*VN82P>YCk zcpHOFW~#hhW;ezW$0C9dHM`8dep5p~LskkwU%0xVrG9Uh8Hx9WLk1GqrNehSgR{wu z#R5I1muwP68tx=q>l2}n8Esq9YTypsEzh|}JYw@rxfl0oco)aJu}{LSw&sgBY^&J; zu|&&t@0S%mgarr!vM$oQ7E3#DwBut0gex%n86V;_r~jk=58|- zmv$fK_y`IajJ{Z7I2`GuL`d;bj*m*Q+81k!NWsG#A4e7yr^k#pQ2L`gC|k?AyQ2id zj5&~lM>&q+6O@=(JZc7ZGvt+BDPuwe^=#dOPjP%2pAiT3O2=dPtcJ%qK8MeXr}gc+ ziZ5_Hi6K#9uhbvI367I^N^G{Tatvcc!zjlX#>M0IR^5uz9ACm2p%_a@^DM_R__A1K zR6D+cuWI-j$Jg-k;ajr3zRi$vt)c3|;h-4^iI`^;>#it4L@U0 zw${s4s0;QI@)5TO656dAoSQ@sbO_Gw^%-LBk*AwfU1c!Oto9i`e5Vs=?o= zIxEar+}jZGdzp?m$X{xmZcOH~;hzTng@0>!lj8#ZbMjTE%5ug@ep!;p1jn!NYd8Hf zMYOu6P2b|OG1b5@vvOu*3I!Yrhnf??pquGpwyS^{q?VV>sjAG$*%YZ_33PY6nVYur z#8Fo!%Mwqxd}IrB=v}U-bnM;~4;-xE^MKnr#tM4SV<5yJ;A_pK3D!H=bdpC0I976K{ zJr|Mc_iyOgdA;Wn@_ZAi{{ZXhBnp{12#7{!9?MW)Ts#W*7_u3fD#!3Ph9h{8CSHcK zC}}>0(vA_7`BjgaREJUS8%CAidJ4529;?TCrYdg)bNx1t>ah)Dfrm5}pTN?pVbqVK z0T@OTEi*Ty$F#U@Qk*x6_Hk^PTxM=fYtacQqwO>fPDCUYC6&9!u~r@&BV(iXV~}4&@S@OheuU zqM09&M5W3kC`muYPiQ8Sq@=13bh5?_%WI=a+}b45K`9%7**FNjnGo&FP;pvsmN0iy z#4(w0+Xp~plPuS?pSMYN>{(0&@B0L)< z1?aib7flt^57Zb1?z9w+C`Je~5T+)GP-$gKBwN3kCPKFUp(cv|Lq{iGr{Ty^*ajz(uh8^kV|avN9G?VH`k+FyC*HWWD%B>WE*u4at(}#--d$(#$ZYh>L|WRq?8`s!XP=s78?pEZNDL11;52>G}e%p*UA3RsqbG?-@oG@ hq;(OO$SutnV-{*7IkPhdb1`{?4KS9;ve{I4{tHsYKbZgk literal 5571 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 -* Classe representant les échanges UDP entre utilisateurs. +* Classe representant les echanges UDP entre utilisateurs. *

*/ public class UDPEchange { - private static Boolean Connecte = true; // True si l'utilisateur peut se connecter avec ce nom d'utilisateur , False sinon + private static Boolean Connecte = true; + // True si l'utilisateur peut se connecter avec ce nom d'utilisateur , False sinon + /** + * Getter + * @return le boolean connecte (True s'il peut se connecter avec ce nom d'utilisateur , False sinon) + */ public static Boolean getConnecte() { return Connecte; } + + /** + * Setter + * @param value La nouvelle valeur du boolean de connexion + */ public static void setConnecte(Boolean value) { Connecte = value ; } + private static Boolean PseudoValide = true; + // True si l'utilisateur a (ou demande) un pseudo valide , False sinon + + /** + * Getter + * @return le boolean PseudoValide (True s'il peut utiliser ce pseudo , False sinon) + */ + public static Boolean getPseudoValide() { + return PseudoValide; + } + + /** + * Setter + * @param value La nouvelle valeur du boolean concernant le pseudo valide + */ + public static void setPseudoValide(Boolean value) { + PseudoValide = value ; + } + /** *

* Méthode permettant d'envoyer un message à tout les utilisateurs - * à l'aide du protocole UDP + * a l'aide du protocole UDP *

- * - * @param broadcastAdress l'addresse de broadcast du réseau - * @param broadcastMessage correspond au message à transmettre aux utilisateurs - * @param port : port destination - * + * @param broadcastMessage correspond au message a transmettre aux utilisateurs */ - public static void connexion( InetAddress broadcastAdress , String broadcastMessage , Integer port) throws IOException { + public static void EnvoiBroadcast(String broadcastMessage) throws IOException { + int port = 1234 ; // Envoie en broadcast à tous les utilsateurs for (InetAddress broadcastAddr : listAllBroadcastAddresses()) { DatagramSocket socket = new DatagramSocket(); socket.setBroadcast(true); byte[]buffer = broadcastMessage.getBytes(); - DatagramPacket packet = new DatagramPacket( buffer, buffer.length, broadcastAddr, port ); + DatagramPacket packet = new DatagramPacket( buffer, buffer.length, broadcastAddr,port); socket.send(packet); socket.close(); System.out.println("Broadcast sent with address " + broadcastAddr.toString()); - try { - Thread.sleep(1000); // L'utilisateur doit attendre la réponse de tous les utilisateurs connectes - } catch (InterruptedException e) { - e.printStackTrace(); - } - if (UDPEchange.getConnecte()) { - System.out.println("Connexion reussie"); - } - else - { - System.out.println("Connexion echoue"); - System.exit(1) ; // A MODIFIER NORMALEMENT ON LUI DEMANDE DE CHOISIR UN NV MDP - } + System.out.println("***********Message envoye***********"); + System.out.println("Dest Ip: " + broadcastAddr.toString()); + System.out.println("Dest port: " + String.valueOf(port)); + System.out.println("Contenu: "); + System.out.println(broadcastMessage); + System.out.println("************************************"); } - /* - DatagramSocket socket = new DatagramSocket(); - socket.setBroadcast(true); - byte[]buffer = broadcastMessage.getBytes(); - DatagramPacket packet = new DatagramPacket( buffer, buffer.length, broadcastAdress, 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("************************************"); } /** *

- * Méthode permettant la reception de messages d'utilisateurs - * à l'aide du protocole UDP + * Methode permettant la reception de messages d'utilisateurs + * a l'aide du protocole UDP *

- * * @param app L'application de chat de l'utilisateur qui receptionne le message - * */ public static void ecouteUDP(ChatApp app) { DatagramSocket socket = null; ExecutorService exec = Executors.newFixedThreadPool(1000); try { - socket = new DatagramSocket(app.getMe().getPort()); + socket = new DatagramSocket(1234); } catch (SocketException e1) { e1.printStackTrace(); } byte buffer[] = new byte[1024]; - System.out.println("Ecoute sur le port: "+app.getMe().getPort().toString()); + System.out.println("Ecoute sur le port: 1234"); while(true) { DatagramPacket data = new DatagramPacket(buffer,buffer.length); @@ -107,29 +109,39 @@ public class UDPEchange { } catch (IOException e) { e.printStackTrace(); } - // Un thread est lancé à chaque reception d'un message + // Un thread est lance à chaque reception d'un message System.out.println("Message recu!"); exec.submit(new RunnerUDP(data,app)); } } - public static void envoiUnicast( InetAddress broadcastAdress , String broadcastMessage , Integer port) throws IOException { - // Envoie en broadcast à tous les utilsateurs + /** + *

+ * Methode permettant d'envoyer un message a utilisateur en particulier + * a l'aide du protocole UDP + *

+ * @param Adress l'addresse de l'utilisateur + * @param Message correspond au message à transmettre a l'utilisateur + */ + public static void envoiUnicast( InetAddress Adress , String Message ) throws IOException { DatagramSocket socket = new DatagramSocket(); - byte[]buffer = broadcastMessage.getBytes(); - //DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLoopbackAddress(), port ); - DatagramPacket packet = new DatagramPacket( buffer, buffer.length, broadcastAdress, port ); + byte[]buffer = Message.getBytes(); + DatagramPacket packet = new DatagramPacket( buffer, buffer.length, Adress, 1234 ); 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("Dest Ip: " + Adress.toString()); + System.out.println("Dest port: " + String.valueOf(1234)); System.out.println("Contenu: "); - System.out.println(broadcastMessage); + System.out.println(Message); System.out.println("************************************"); } - + /** + *

+ * Methode permettant de recuperer la liste des adresses de broadcast, chacune associer à une interface de la machine + *

+ */ static List listAllBroadcastAddresses() throws SocketException { List broadcastList = new ArrayList<>(); Enumeration interfaces @@ -155,8 +167,8 @@ public class UDPEchange { /** *

-* Classe implémentant l'interface Runnable. -* Contient les traitements à executer dans un thread lancer par des méthodes de la class UDPEchange +* Classe implementant l'interface Runnable. +* Contient les traitements a executer dans un thread lancer par des methodes de la class UDPEchange *

*/ class RunnerUDP implements Runnable { @@ -170,7 +182,7 @@ class RunnerUDP implements Runnable { /** *

- * Méthode qui redefinie les traitements qui seront exécutés dans le thread: + * Methode qui redefinie les traitements qui seront executes dans le thread: * Met à jour la liste des utilisateurs actifs *

* @@ -184,10 +196,10 @@ class RunnerUDP implements Runnable { 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"); @@ -207,7 +219,7 @@ class RunnerUDP implements Runnable { reponse += app.getMe().toString(); try { - UDPEchange.envoiUnicast(u.getIp(),reponse,u.getPort()); + UDPEchange.envoiUnicast(u.getIp(),reponse); }catch(IOException e) { System.out.println("Echec de l'envoi du message"); @@ -216,11 +228,11 @@ 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 @@ -235,71 +247,75 @@ class RunnerUDP implements Runnable { } } - //************************************************************************************************************************ - //************************************************************************************************************************* + //******************************************************************************************************************* + //******************************************************************************************************************* //****************************************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]); - Utilisateur Destination = Utilisateur.stringToUtilisateur(received.split("\n")[1]); - String Message = "Bon Choix Pseudo\n" + received.split("\n")[2] ; - System.out.println(Message); - try { - - //UDPEchange.envoiUnicast(Destination.getIp(),Message, Destination.getPort()); - UDPEchange.envoiUnicast(InetAddress.getLoopbackAddress(),Message, 4000); - } catch (IOException e) { - e.printStackTrace(); - } - } - else { - Utilisateur Destination = ( app.getActifUsers() ).getPseudoList(received.split("\n")[1]); - String Message = "Mauvais Choix Pseudo\n" ; - System.out.println(Message); - try { - UDPEchange.envoiUnicast(Destination.getIp(),Message, Destination.getPort()); - } catch (IOException e) { - e.printStackTrace(); - } - } - ( app.getActifUsers() ).afficherListeUtilisateurs(); + if (Type.equals("Demande Modification Pseudo")) { + Utilisateur Source = Utilisateur.stringToUtilisateur(received.split("\n")[1]); + if (! Source.equals(this.app.getMe())) { // On envoit en broadcast mais on ne souhaite pas recevoir de message de nous même + String nouveau = received.split("\n")[2] ; + String Message = ""; + if(( app.getActifUsers() ).verifierUnicite(nouveau)) { + Message = "Bon Choix Pseudo\n" + nouveau ; + } + else { + Message = "Mauvais Choix Pseudo\n" ; + } + System.out.println(Message); + try { + UDPEchange.envoiUnicast(Source.getIp(),Message); + } catch (IOException e) { + e.printStackTrace(); + } + } } - //************************************************************************************************************************ - //************************************************************************************************************************* - //****************************************Mauvais choix d'un pseudo**************************************** - //************************************************************************************************************************ - //**************************************** + //************************************************************************************************************ + //************************************************************************************************************ + //**************************************** Modification pseudo reussi **************************************** + //************************************************************************************************************ + //************************************************************************************************************ - + if (Type.equals("Modification pseudo reussi")) { + Utilisateur Source = Utilisateur.stringToUtilisateur(received.split("\n")[1]); + if (! Source.equals(this.app.getMe())) { // On envoit en broadcast mais on ne souhaite pas recevoir de message de nous même + String nouveau = received.split("\n")[2] ; + if(app.getActifUsers().appartient(Source)) { // On verifie d'abord que Source appartient bien a la liste des utilisateurs actifs + app.getActifUsers().modifierList(Source.getPseudo(), nouveau); + } + { + // Suite a une perte d'un message lors d'une connexion l'utilisateur Source n'apparait pas dans la liste + app.getActifUsers().addList(Source); + } + } + } + //********************************************************************************************************* + //********************************************************************************************************* + //****************************************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"); + UDPEchange.setPseudoValide(false); } - //************************************************************************************************************************ - //************************************************************************************************************************* - //****************************************Bon choix d'un pseudo**************************************** - //************************************************************************************************************************ - //************************************************************************************************************************ + //****************************************************************************************************************** + //****************************************************************************************************************** + //****************************************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()); - System.out.println("Changement pseudo accepte, nouvelle liste des utilisateurs actifs:"); - app.getActifUsers().afficherListeUtilisateurs(); + // Il n'y a rien a faire ici } - //************************************************************************************************************************ - //************************************************************************************************************************* + //********************************************************************************************************* + //********************************************************************************************************* //****************************************Demande d'une deconnexion**************************************** - //************************************************************************************************************************ - //************************************************************************************************************************ + //********************************************************************************************************* + //********************************************************************************************************* if (Type.equals("Deconnexion")) { ( app.getActifUsers() ).supprimerList(Utilisateur.stringToUtilisateur(received.split("\n")[1])); diff --git a/Implementation/src/Utilisateur.class b/Implementation/src/Utilisateur.class index 2c23d5d91f613a483289659b7819dde9a2f3413a..b3f5fb2e895d7d4b55dfd748e58a80b6bb8b567b 100644 GIT binary patch delta 79 zcmbOvGD&2^MrJnF^wbj1l*zl98@M=u%z)z5(vx3TPCnk>&DHaUddl{twa cd9owB@Z|MCb_zo(n9ao@%9yrUf#VY+0Mb7fKL7v#