From 0bb9c560b1c0f60f7c1928921d34e9b87c19d564 Mon Sep 17 00:00:00 2001 From: Alexandre Gonzalvez Date: Wed, 2 Dec 2020 13:35:01 +0100 Subject: [PATCH] commentaires + 2eme RemoteUser --- Application/Clavardage/bin/RemoteUser.class | Bin 1520 -> 1554 bytes Application/Clavardage/bin/User.class | Bin 9102 -> 9037 bytes .../Clavardage/bin/UserListeningThread.class | Bin 3165 -> 3186 bytes Application/Clavardage/src/RemoteUser.java | 12 +- Application/Clavardage/src/User.java | 210 ++++++++++-------- .../Clavardage/src/UserListeningThread.java | 2 +- 6 files changed, 126 insertions(+), 98 deletions(-) diff --git a/Application/Clavardage/bin/RemoteUser.class b/Application/Clavardage/bin/RemoteUser.class index cc1ce98ac0ba4a3fe4eb861e83052ed390478096..8a456d36dca141476f2cc2b6df21d11ac7e23cd0 100644 GIT binary patch delta 297 zcmeysJ&A|w)W2Q(7#J8#7_268d2+B9eEt0961PAkH=hgP9C`K%Ov=Cp>?02CKc72ZJet7lRpt1khXs zi0KTH3{pTI&>o_f%OpLzE&sUV1n_rR|TAW%05}NGAIBD`* z#w<1+9tK?oy~(jm%1Q&cMhIlr;y6 IF)>&G01Eaz(f|Me diff --git a/Application/Clavardage/bin/User.class b/Application/Clavardage/bin/User.class index 30485242de153e6d059fcd0acb9ea0d0e7f786c3..510087c4b04974abe709dd507fff5fb5654035e7 100644 GIT binary patch literal 9037 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 I%fzq^0BAffumAu6 delta 203 zcmew)aaV%t)W2Q(7#J8#7`ATYn!qm3=a!kLkW#8pl2MeJn4-YNu!dnBJHy(^2iYY= z*E8@jGO!mEW#*OSEGpI9YG1xOOGiU%+N-?kj$xsG%hA^N^1W+!LL7O3pL7yRpK@%t= n1~Ct)LmSA`2AZ$WFcD~qA&|$;z?8+#V9x^NZU%Ch7`6ZaITR^; diff --git a/Application/Clavardage/src/RemoteUser.java b/Application/Clavardage/src/RemoteUser.java index c3dbb5f..6389019 100644 --- a/Application/Clavardage/src/RemoteUser.java +++ b/Application/Clavardage/src/RemoteUser.java @@ -3,12 +3,12 @@ import java.net.InetAddress; public class RemoteUser { InetAddress addIP; - int nPort; + int portTCP; String pseudo; - public RemoteUser(InetAddress remoteUserIP, int remoteUserPort,String pseudo) { + public RemoteUser(InetAddress remoteUserIP, int remoteUserPortTCP,String pseudo) { this.addIP=remoteUserIP; - this.nPort=remoteUserPort; + this.portTCP=remoteUserPortTCP; this.pseudo=pseudo; } @@ -21,11 +21,11 @@ public class RemoteUser { } public int getRemoteUserPort() { - return nPort; + return portTCP; } public void setRemoteUserPort(int remoteUserPort) { - this.nPort = remoteUserPort; + this.portTCP = remoteUserPort; } public String getPseudo() { @@ -49,7 +49,7 @@ public class RemoteUser { if (addIP == null) { if (other.addIP != null) return false; - } else if (!addIP.equals(other.addIP)) + } else if (!(addIP.equals(other.addIP) && portTCP==other.portTCP)) return false; return true; } diff --git a/Application/Clavardage/src/User.java b/Application/Clavardage/src/User.java index a6ac7f1..136a9be 100644 --- a/Application/Clavardage/src/User.java +++ b/Application/Clavardage/src/User.java @@ -6,28 +6,31 @@ import java.util.ArrayList; // import the ArrayList class public class User{ - final static int portUDPlistening_remoteUsr1 = 20001; - + + /*** CONSTANTES ***/ + final static int portUDPlistening_remoteUsr2 = 20002; + final static int portUDPlistening_remoteUsr3 = 20003; + + /*** VARIABLES ***/ protected InetAddress addIP; protected String pseudo; - protected int portUDPsend; protected int portUDPlistening; protected int portTCP; - protected boolean actif; - protected ArrayList remoteUserList = new ArrayList(); - protected ArrayList userChatList = new ArrayList(); + protected ArrayList remoteUserList = new ArrayList(); // listes des utilisateurs actifs + protected ArrayList userChatList = new ArrayList(); // listes des utilisateurs avec qui un chat est actif - protected UserListeningThread threadListeningUDP; - public Boolean stopListeningUDPThread=false; + protected UserListeningThread threadListeningUDP; // UDP listening thread (pour répondre aux nouveaux utilisateurs) /* * Constructor of User - * parameters - * #nport - * description : On récupère l'adresse de la machine, le numéro de port à utiliser(TODO), on demande un pseudo à l'utilisateur + * $parameters + * * + * * + * * + * $description : On récupère l'adresse de la machine, le numéro de port à utiliser(TODO), on demande un pseudo à l'utilisateur * que l'on vérifie, une fois validé, l'utilisateur devient actif (Début de l'écoute UDP pour les pseudos) */ public User(int portUDPsend,int portUDPlistening,int portTCP) throws IOException{ @@ -44,28 +47,20 @@ public class User{ this.portUDPlistening = portUDPlistening; this.portTCP = portTCP; - this.setPseudo(); + this.initPseudo(); this.setActif(true); - - //ask_change_pseudo(); - /* - boolean wantstochange = true; //A faire avec un bouton dans SWING - if(wantstochange) { - //changePseudo(); - } - */ - //this.waitProgramtoStop() } - /* remoteUser - * Constructor of User simuled a remote user (Already log into our system) - * parameters - * #nport - * #pseudo - * description : On récupère l'adresse de la machine, le numéro de port à utiliser(TODO), on demande un pseudo à l'utilisateur - * que l'on vérifie, une fois validé, l'utilisateur devient actif (Début de l'écoute UDP pour les pseudos) + /* + * Constructor of User (simulation des utilisateurs distants) + * $parameters + * * + * * + * * + * $description : On récupère l'adresse de la machine, le numéro de port à utiliser(TODO), on demande un pseudo à l'utilisateur + * que l'on vérifie, une fois validé, l'utilisateur devient actif (Début de l'écoute UDP pour les pseudos) */ public User(int portUDPsend,int portUDPlistening, int portTCP,String pseudo) { try @@ -84,53 +79,46 @@ public class User{ } - + /*** GETTER ***/ public InetAddress getAddIP() { return addIP; } - - - public void setAddIP(InetAddress addIP) { - this.addIP = addIP; - } - - public String getPseudo() { return pseudo; } - + public int getPortTCP() { return portTCP; } - - - public void setPortTCP(int portTCP) { - this.portTCP = portTCP; - } public int getPortUDPlistening() { return portUDPlistening; } + + public int getPortUDPsend() { + return portUDPsend; + } + public boolean isActif() { + return actif; + } + + /*** SETTER ***/ + public void setAddIP(InetAddress addIP) { + this.addIP = addIP; + } + public void setPortTCP(int portTCP) { + this.portTCP = portTCP; + } public void setPortUDPlistening(int portUDPlistening) { this.portUDPlistening = portUDPlistening; } - public int getPortUDPsend() { - return portUDPsend; - } - - public void setPortUDPsend(int portUDPsend) { this.portUDPsend = portUDPsend; } - public boolean isActif() { - return actif; - } - - public void setActif(boolean actif) { notify_remote_user(); this.threadListeningUDP = new UserListeningThread("UDP Listening thread",this); @@ -139,7 +127,13 @@ public class User{ this.actif=true; } + /*** PROCEDURES ***/ + + /* notify_remote_user + * En utilisant le port UDP d'envoi, on envoi en broadcast les informations nous concernant + */ public void notify_remote_user() { + // Création du socket d'envoi d'information DatagramSocket dgramSocket= null; try { dgramSocket= new DatagramSocket(portUDPsend,this.addIP); @@ -147,24 +141,38 @@ public class User{ e.printStackTrace(); } + // Construction du message à envoyer String toSend = this.addIP.toString()+":"+this.portTCP+":"+this.pseudo+":test"; - //System.out.println("Message avant envoi " +toSend); - DatagramPacket outPacket= new DatagramPacket(toSend.getBytes(), toSend.length(),this.addIP, portUDPlistening_remoteUsr1); - + + + // Send information to usr2 + DatagramPacket outPacket= new DatagramPacket(toSend.getBytes(), toSend.length(),this.addIP, portUDPlistening_remoteUsr2); try { dgramSocket.send(outPacket); } catch (IOException e) { e.printStackTrace(); } + + // Send information to usr3 + outPacket= new DatagramPacket(toSend.getBytes(), toSend.length(),this.addIP, portUDPlistening_remoteUsr3); + try { + dgramSocket.send(outPacket); + } catch (IOException e) { + e.printStackTrace(); + } + dgramSocket.close(); } - public void setPseudo() throws IOException { + /*initPseudo + * Demande à l'utilisateur de rentrer un pseudo et validation de ce dernier en demandant aux utilisateurs distants leurs informations + */ + public void initPseudo() throws IOException { Scanner sc1 = new Scanner(System.in); // Create a Scanner object System.out.println("Enter nickname :"); String tmpPseudo = sc1.nextLine(); // Read user input - while(!(this.validatePseudo(tmpPseudo))) { + while(!(this.validatePseudo(tmpPseudo))) { // On demande aux autres utilisateurs de nous envoyer leurs informations et on test si le pseudo est déjà utilisé System.out.println("Enter another nickname :"); tmpPseudo = sc1.nextLine(); // Read user input } @@ -174,6 +182,15 @@ public class User{ System.out.println("Your nickname : " + tmpPseudo + " is valid !"); } + /* validatePseudo + * $parametres + * *tmpPseudo : String => Le pseudo à valider + * $description + * On envoi en broadcast (pour l'instant envoi sur les ports de notre ordinateur) d'une demande d'information + * On attends les réponses pendant 5 secondes + * On valide le pseudo en fonction des pseudos reçu + * On en profites pour ajouter les utilisateurs répondant à notre liste d'utilisateur distant (RemoteUser) + */ public Boolean validatePseudo(String tmpPseudo) throws IOException { @@ -181,19 +198,24 @@ public class User{ InetAddress broadcastIP = InetAddress.getLocalHost(); // change to broadcast //System.out.println(broadcastIP); DatagramSocket dgramSocket = new DatagramSocket(this.portUDPsend,this.addIP); - byte[] buffer = new byte[256]; + // Création du message à envoyer String toSend = this.getAddIP()+":"+this.portUDPsend+":test"; - DatagramPacket outPacket= new DatagramPacket(toSend.getBytes(), toSend.length(),broadcastIP, portUDPlistening_remoteUsr1); - + + // Send to remote user 1 + DatagramPacket outPacket= new DatagramPacket(toSend.getBytes(), toSend.length(),broadcastIP, portUDPlistening_remoteUsr2); dgramSocket.send(outPacket); - Boolean valid = true; - - Date oldDate = new Date(); - Date newDate = new Date(); + // Send to remote user 2 + outPacket= new DatagramPacket(toSend.getBytes(), toSend.length(),broadcastIP, portUDPlistening_remoteUsr3); + dgramSocket.send(outPacket); + // Initialisation des paramètres de la boucles + Boolean valid = true; + + + DatagramPacket inPacket; String response = null; String[] lstresponse= new String [4]; @@ -203,6 +225,8 @@ public class User{ System.out.print("Wait for pseudo validation ...\n"); int nbReponse =0; + Date oldDate = new Date(); + Date newDate = new Date(); while( (newDate.getTime()-oldDate.getTime()) < 5000 && valid) { nbReponse++; @@ -217,18 +241,19 @@ public class User{ buffer = inPacket.getData(); response = new String(buffer); - if(arecu) { - //System.out.println("Reponse : "+response); - + if(arecu) { + // On découpe la réponse en tableau de string ([adresseIP,tcpPort,nickname]) lstresponse = response.split(":"); + // Affichage de la réponse System.out.println("Remote user n°"+nbReponse); System.out.println("\tIP : "+lstresponse[0]); System.out.println("\tn°Port : "+lstresponse[1]); System.out.println("\tpseudo : "+lstresponse[2]); + // Si reception on ajoute l'utilisateur à notre liste d'utilisateur distant this.addRemoteUser(InetAddress.getByName(lstresponse[0].split("/")[1]),Integer.parseInt(lstresponse[1]),lstresponse[2]); - valid= (tmpPseudo.compareTo(lstresponse[2])!=0); + valid= (tmpPseudo.compareTo(lstresponse[2])!=0); // On regarde la différence entre notre pseudo et le pseudo reçu } @@ -257,7 +282,7 @@ public class User{ } // change pseudo -private void changePseudo() throws IOException { //seule différence avec setPseudo c'est qu'on check si on remet pas le même +private void setPseudo() throws IOException { //seule différence avec setPseudo c'est qu'on check si on remet pas le même String oldPseudo = this.pseudo; //Saves the old one for comparison Scanner sc3 = new Scanner(System.in); // Create a Scanner object @@ -275,23 +300,25 @@ private void changePseudo() throws IOException { //seule diff notify_remote_user(); } - + /*printRemoteUserList + * $descrition + * Affichage de la liste d'utilisateur actif avec leurs index dans la liste + */ public void printRemoteUserList() { - System.out.println("Internal list of remote users:\n"); + System.out.println("Internal list of active remote users:\n"); for(int i=0; i