diff --git a/Application/Clavardage/src/controller/Controller.java b/Application/Clavardage/src/controller/Controller.java index 07331ea..7fefec4 100644 --- a/Application/Clavardage/src/controller/Controller.java +++ b/Application/Clavardage/src/controller/Controller.java @@ -31,10 +31,11 @@ public class Controller { int NB_SECOND_WAITING_RESPONSE_BROADCAST = 2; // TO REMOVE when we use broadcast - final static int portUDPlistening_usr1 = 31001; + final static int portUDPlistening_remoteUsr1 = 31001; final static int portUDPlistening_remoteUsr2 = 31002; final static int portUDPlistening_remoteUsr3 = 31003; - final static int [] tabBroadcast = {portUDPlistening_usr1,portUDPlistening_remoteUsr2,portUDPlistening_remoteUsr3}; + final static int portUDPlistening_local = 31004; + final static int [] tabBroadcast = {portUDPlistening_remoteUsr1,portUDPlistening_remoteUsr2,portUDPlistening_remoteUsr3,portUDPlistening_local}; public Boolean interfaceRunning = false; /*** ATTRIBUTS ***/ @@ -51,6 +52,7 @@ public class Controller { * @param portUDPsend : int => le numéro de port pour envoyé ces informations lors d'un changements ou d'une nouvelle connexion * @param portUDPlistening : int => le numéro de port pour recevoir les informations des nouveaux utilisateurs ou les changements * @param portTCP : int => le numéro de port pour commencer une nouvelle conversation + * @throws IOException * @descrition *
* On récupère l'adresse de la machine, on demande un pseudo à l'utilisateur que l'on vérifie @@ -60,9 +62,10 @@ public class Controller { * - notification aux autres utilisateurs actifs *
*/ - private Controller(int portUDPsend,int portUDPlistening,int portTCP,Historique histoire) { + private Controller(int portUDPsend,int portUDPlistening,int portTCP,Historique histoire) throws IOException { this.histoire= histoire; + // Récupération de l'adresse IP local InetAddress addIP = null; try { @@ -71,22 +74,26 @@ public class Controller { catch(UnknownHostException e) { JOptionPane.showMessageDialog(null ,"Could not find local address!"); } + + // Création de l'utilisateur this.myUser = new LocalUser("Unknown",addIP,portUDPsend,portUDPlistening,portTCP); try { - this.myUser.setPseudo(this.initPseudo()); + this.myUser.setPseudo(this.initPseudo()); // Initialisation du pseudo manuel } catch (IOException e) { e.printStackTrace(); } + // Création des threads d'écoutes this.udp_connect_thread = new ListeningThreadUDP("UDP Listening thread",this); this.udp_connect_thread.start(); - this.tcp_connect_thread = new ListeningThreadTCPConnection("TCP main Listening thread",this); this.tcp_connect_thread.start(); + // Notification des utilisateurs distants notify_remote_users(); + // Création de l'interface interfaceRunning =true; view=Interface.createAndShowGUI(this); } @@ -106,8 +113,11 @@ public class Controller { * - notification aux autres utilisateurs actifs * */ - private Controller(int portUDPsend,int portUDPlistening,int portTCP,String pseudo,Historique histoire) { + private Controller(int portUDPsend,int portUDPlistening,int portTCP,String pseudo,Historique histoire) throws IOException{ + this.histoire=histoire; + + // Récupération de l'adresse IP local InetAddress addIP = null; try { @@ -117,6 +127,7 @@ public class Controller { JOptionPane.showMessageDialog(null ,"Could not find local address!"); } + // Création de l'utilisateur this.myUser = new LocalUser(pseudo,addIP,portUDPsend,portUDPlistening,portTCP); try { if(this.validatePseudo(pseudo)) { @@ -128,6 +139,11 @@ public class Controller { this.tcp_connect_thread = new ListeningThreadTCPConnection("TCP main Listening thread",this); this.tcp_connect_thread.start(); + + // Notification des utilisateurs distants + notify_remote_users(); + + // Création de l'interface interfaceRunning =true; view=Interface.createAndShowGUI(this); } @@ -137,54 +153,14 @@ public class Controller { } catch (IOException e) { e.printStackTrace(); } - - - - - - - notify_remote_users(); } - /*** GETTERS ***/ - public LocalUser getMyUser() { - return myUser; - } - public Interface getview() { - return view; - } - public ListeningThreadUDP getUdp_connect_thread() { - return udp_connect_thread; - } - public ListeningThreadTCPConnection getTcp_connect_thread() { - return tcp_connect_thread; - } - public Historique getHistory() { - return histoire; - } + /**************************** Initialisation pseudo et découverte utilisateur distant (+notification utilisateurs distants) **********************************/ - /*** SETTERS ***/ - public void setMyUser(LocalUser myUser) { - this.myUser = myUser; - } - public void setview(Interface view) { - this.view = view; - } - public void setUdp_connect_thread(ListeningThreadUDP udp_connect_thread) { - this.udp_connect_thread = udp_connect_thread; - } - public void setTcp_connect_thread(ListeningThreadTCPConnection tcp_connect_thread) { - this.tcp_connect_thread = tcp_connect_thread; - } - public void setHistory(Historique histoire) { - this.histoire=histoire; - } - - - /** + /** initPseudo ** Demande à l'utilisateur de rentrer un pseudo et valide de ce dernier en demandant aux * utilisateurs distants leurs informations @@ -203,7 +179,7 @@ public class Controller { return tmpPseudo; } - /** + /** changePseudo *
* Demande à l'utilisateur de rentrer un pseudo et valide de ce dernier en demandant aux * utilisateurs distants leurs informations. @@ -223,12 +199,11 @@ public class Controller { this.myUser.setPseudo(tmpPseudo); JOptionPane.showMessageDialog(null ,"Your new nickname : " + tmpPseudo + " is valid !"); this.notify_remote_users(); - } - - } - /** + + + /** validatePseudo *
* *tmpPseudo : String => Le pseudo à valider *
@@ -242,29 +217,18 @@ public class Controller { *
*/ public Boolean validatePseudo(String tmpPseudo) throws IOException { + Boolean valid = true; - - // Call broadcast - InetAddress broadcastIP = InetAddress.getLocalHost(); // change to broadcast - //System.out.println(this.myUser.getPortUDPsend()); DatagramSocket dgramSocket = new DatagramSocket(this.myUser.getPortUDPsend(),this.myUser.getAddIP()); - byte[] buffer = new byte[256]; // Création du message à envoyer String toSend = this.myUser.getAddIP()+":"+this.myUser.getPortUDPsend()+":info"; - // Send to other active user (simulation of broadcast) - DatagramPacket outPacket = null; - int tabBroadcastSize = tabBroadcast.length; - for(int i=0;i
+ */
+ public void broadcast(DatagramSocket dgramSocket,String toSend) throws IOException {
+ InetAddress broadcastIP = InetAddress.getLocalHost();
+ DatagramPacket outPacket = null;
+ int tabBroadcastSize = tabBroadcast.length;
+ for(int i=0;i
- * Affichage de la liste d'utilisateurs actifs avec leurs index dans la liste - *
- */ - public void printRemoteUserList() { - System.out.println("Internal list of active remote users:"); - - for(int i=0; i