diff --git a/Application/Clavardage/bin/.gitignore b/Application/Clavardage/bin/.gitignore
index b32d6f7..6a15f9e 100644
--- a/Application/Clavardage/bin/.gitignore
+++ b/Application/Clavardage/bin/.gitignore
@@ -1,4 +1,3 @@
-/UserListeningThreadTCP.class
-/UserListeningThreadUDP.class
-/UserConnexionthreadTCP.class
-/Database.class
+/controller/
+/model/
+/view/
diff --git a/Application/Clavardage/bin/RemoteUser.class b/Application/Clavardage/bin/RemoteUser.class
deleted file mode 100644
index db140d3..0000000
Binary files a/Application/Clavardage/bin/RemoteUser.class and /dev/null differ
diff --git a/Application/Clavardage/bin/User.class b/Application/Clavardage/bin/User.class
deleted file mode 100644
index 8d9cba5..0000000
Binary files a/Application/Clavardage/bin/User.class and /dev/null differ
diff --git a/Application/Clavardage/src/Database.java b/Application/Clavardage/src/Database.java
deleted file mode 100644
index c8a672d..0000000
--- a/Application/Clavardage/src/Database.java
+++ /dev/null
@@ -1,9 +0,0 @@
-
-public class Database {
- private User myUser;
-
- public void Database() {
- Connection con=null;
- }
-
-}
diff --git a/Application/Clavardage/src/Interface.java b/Application/Clavardage/src/Interface.java
deleted file mode 100644
index 9b2fde8..0000000
--- a/Application/Clavardage/src/Interface.java
+++ /dev/null
@@ -1,124 +0,0 @@
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.*;
-
-public class Interface implements ActionListener {
-
- private String Pseudolabeltext = "";
- final JLabel Pseudolabel = new JLabel("Pseudo: " + Pseudolabeltext);
- private JTextField PseudotextField;
- private JButton convertPseudo;
-
- //Specifies the look and feel to use. Valid values:
- //null (use the default), "Metal", "System", "Motif", "GTK+"
- final static String LOOKANDFEEL = null;
-
- public Component createComponents() {
- PseudotextField = new JTextField();
- PseudotextField.setColumns(10);
- PseudotextField.setText("Enter pseudo");
-
- convertPseudo = new JButton("Convert Pseudo");
- convertPseudo.addActionListener(this);
-
- Pseudolabel.setLabelFor(PseudotextField);
-
- /*
- * An easy way to put space between a top-level container
- * and its contents is to put the contents in a JPanel
- * that has an "empty" border.
- */
- JPanel pane = new JPanel(new GridLayout(0, 1));
- pane.add(PseudotextField);
- pane.add(Pseudolabel);
- pane.add(convertPseudo);
- pane.setBorder(BorderFactory.createEmptyBorder(
- 30, //top
- 30, //left
- 10, //bottom
- 30) //right
- );
-
- return pane;
- }
-
- // Modify the event handler code depending on which button is pressed.
- // If the 1st button is pressed, increase the numClicks value by 1, else
- // increase the value by 1000.
- public void actionPerformed(ActionEvent e) {
- String texteUtilisateur = PseudotextField.getText();
- Pseudolabel.setText("Pseudo: " + texteUtilisateur);
- }
-
- private static void initLookAndFeel() {
-
- // Swing allows you to specify which look and feel your program uses-
- // -Java,
- // GTK+, Windows, and so on as shown below.
- String lookAndFeel = null;
-
- if (LOOKANDFEEL != null) {
- if (LOOKANDFEEL.equals("Metal")) {
- lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
- } else if (LOOKANDFEEL.equals("System")) {
- lookAndFeel = UIManager.getSystemLookAndFeelClassName();
- } else if (LOOKANDFEEL.equals("Motif")) {
- lookAndFeel = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
- } else if (LOOKANDFEEL.equals("GTK+")) { //new in 1.4.2
- lookAndFeel = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
- } else {
- System.err.println("Unexpected value of LOOKANDFEEL specified: " + LOOKANDFEEL);
- lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
- }
-
- try {UIManager.setLookAndFeel(lookAndFeel);
- } catch (ClassNotFoundException e) {
- System.err.println("Couldn't find class for specified look and feel:" + lookAndFeel);
- System.err.println("Did you include the L&F library in the class path?");
- System.err.println("Using the default look and feel.");
- } catch (UnsupportedLookAndFeelException e) {
- System.err.println("Can't use the specified look and feel (" + lookAndFeel+ ") on this platform.");
- System.err.println("Using the default look and feel.");
- } catch (Exception e) {
- System.err.println("Couldn't get specified look and feel (" + lookAndFeel + "), for some reason.");
- System.err.println("Using the default look and feel.");
- e.printStackTrace();
- }
- }
- }
-
- /**
- * Create the GUI and show it. For thread safety,
- * this method should be invoked from the
- * event-dispatching thread.
- */
- private static void createAndShowGUI() {
- //Set the look and feel.
- initLookAndFeel();
-
- //Make sure we have nice window decorations.
- JFrame.setDefaultLookAndFeelDecorated(true);
-
- //Create and set up the window.
- JFrame frame = new JFrame("SwingApplication");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
- Interface app = new Interface();
- Component contents = app.createComponents();
- frame.getContentPane().add(contents, BorderLayout.CENTER);
-
- //Display the window.
- frame.pack();
- frame.setVisible(true);
- }
-
- public static void main(String[] args) {
- //Schedule a job for the event-dispatching thread:
- //creating and showing this application’s GUI.
- javax.swing.SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- createAndShowGUI();
- }
- });
- }
-}
diff --git a/Application/Clavardage/src/RemoteUser.java b/Application/Clavardage/src/RemoteUser.java
deleted file mode 100644
index 3f17913..0000000
--- a/Application/Clavardage/src/RemoteUser.java
+++ /dev/null
@@ -1,67 +0,0 @@
-import java.net.InetAddress;
-
-public class RemoteUser {
-
- InetAddress addIP;
- int portTCP;
- String pseudo;
-
- /*** CONSTRUCTOR of RemoteUser ***/
- public RemoteUser(InetAddress remoteUserIP, int remoteUserPortTCP,String pseudo) {
- this.addIP=remoteUserIP;
- this.portTCP=remoteUserPortTCP;
- this.pseudo=pseudo;
- }
-
- /*** GETTERS ***/
- public InetAddress getRemoteUserIP() {
- return addIP;
- }
- public int getRemoteUserPort() {
- return portTCP;
- }
- public String getPseudo() {
- return pseudo;
- }
-
-
- /*** SETTERS ***/
- public void setRemoteUserIP(InetAddress remoteUserIP) {
- this.addIP = remoteUserIP;
- }
- public void setRemoteUserPort(int remoteUserPort) {
- this.portTCP = remoteUserPort;
- }
- public void setRemotePseudo(String remoteUserpseudo) {
- this.pseudo = remoteUserpseudo;
- }
-
- /*** OVERRIDE METHODS ***/
- /*
- * equals
- * @see java.lang.Object#equals(java.lang.Object)
- */
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- RemoteUser other = (RemoteUser) obj;
- if (addIP == null) {
- if (other.addIP != null)
- return false;
- } else if (!addIP.equals(other.addIP))
- return false;
- if (portTCP != other.portTCP)
- return false;
- return true;
- }
-
-
-
-
-
-}
diff --git a/Application/Clavardage/src/User.java b/Application/Clavardage/src/User.java
deleted file mode 100644
index 412451a..0000000
--- a/Application/Clavardage/src/User.java
+++ /dev/null
@@ -1,467 +0,0 @@
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.net.*;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import javax.swing.JOptionPane;
-
-import java.util.ArrayList; // import the ArrayList class
-
-
-public class User{
-
- /*** CONSTANTES ***/
- final static int portUDPlistening_remoteUsr2 = 20002; // TO REMOVE when we use broadcast
- final static int portUDPlistening_remoteUsr3 = 20003; // TO REMOVE when we use broadcast
-
- /*** VARIABLES ***/
- protected InetAddress addIP;
- protected String pseudo;
- protected int portUDPsend;
- protected int portUDPlistening;
- protected int portTCP;
- protected boolean actif;
-
- protected ArrayList remoteUserList = new ArrayList(); // listes des utilisateurs actifs
- protected ArrayList userChatList = new ArrayList(); // listes des utilisateurs avec qui un chat est actif
-
- protected UserListeningThreadUDP threadListeningUDP; // UDP listening thread (pour répondre aux nouveaux utilisateurs)
- protected UserListeningThreadTCP threadListeningTCP; // TCP listening thread (pour commencer une nouvelle conversation)
-
- /**
- * Constructor of User (local)
- * $parametres
- * * portUDPsend : int => le numéro de port pour envoyé ces informations lors d'un changements ou d'une nouvelle connexion
- * * portUDPlistening : int => le numéro de port pour recevoir les informations des nouveaux utilisateurs ou les changements
- * * portTCP : int => le numéro de port pour commencer une nouvelle conversation
- *
- * On récupère l'adresse de la machine, le numéro de port à utiliser, 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 et notification aux autres utilisateurs actifs)
- *
- */
-
- public User(int portUDPsend,int portUDPlistening,int portTCP) throws IOException{
- try
- {
- this.addIP = InetAddress.getLocalHost();
- }
- catch(UnknownHostException e) {
- JOptionPane.showMessageDialog(null ,"Could not find local address!");
- }
-
- this.portUDPsend = portUDPsend;
- this.portUDPlistening = portUDPlistening;
- this.portTCP = portTCP;
-
- this.initPseudo();
-
- this.active();
- }
-
- /**
- * Constructor of User (simulation of remote user)
- * $parametres
- * * portUDPsend : int => le numéro de port pour envoyé ces informations lors d'un changements ou d'une nouvelle connexion
- * * portUDPlistening : int => le numéro de port pour recevoir les informations des nouveaux utilisateurs ou les changements
- * * portTCP : int => le numéro de port pour commencer une nouvelle conversation
- * * pseudo : String => le pseudo avec lequel on initie l'utilisateur distant (! pas de vérification)
- *
- * On récupère l'adresse de la machine, le numéro de port à utiliser, 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
- * et notification aux autres utilisateurs actifs)
- *
- */
- public User(int portUDPsend,int portUDPlistening, int portTCP,String pseudo) {
- try
- {
- this.addIP = InetAddress.getLocalHost();
- }
- catch(UnknownHostException e) {
- JOptionPane.showMessageDialog(null ,"Could not find local address!");
- }
- this.portUDPsend = portUDPsend;
- this.portUDPlistening = portUDPlistening;
- this.portTCP = portTCP;
- this.pseudo = pseudo;
-
- this.active();
-
- }
-
-
- /*** GETTERS ***/
- public InetAddress getAddIP() {
- return addIP;
- }
- public String getPseudo() {
- return pseudo;
- }
- public int getPortTCP() {
- return portTCP;
- }
- public int getPortUDPlistening() {
- return portUDPlistening;
- }
- public int getPortUDPsend() {
- return portUDPsend;
- }
- public boolean isActif() {
- return actif;
- }
-
- /*** SETTERS ***/
- 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 void setPortUDPsend(int portUDPsend) {
- this.portUDPsend = portUDPsend;
- }
-
- /**
- *
- * Demande à l'utilisateur de rentrer un pseudo et valide de ce dernier en demandant aux
- * utilisateurs distants leurs informations.
- * On regarde si le pseudo est bien différent de l'ancien
- *
- */
- private void setPseudo() throws IOException {
- String oldPseudo = this.pseudo; //Saves the old one for comparison
-
- String tmpPseudo = JOptionPane.showInputDialog(null, "Enter nickname:"); // Read user input
-
- while(!(this.validatePseudo(tmpPseudo)) || tmpPseudo.equals(oldPseudo)) {
- tmpPseudo = JOptionPane.showInputDialog(null, "Already exist, enter another nickname :"); // Read user input
- }
-
- this.pseudo = tmpPseudo;
- //myObj.close();
- JOptionPane.showMessageDialog(null ,"Your new nickname : " + tmpPseudo + " is valid !");
-
- notify_remote_user();
- }
-
- /**
- *
- * Demande à l'utilisateur de rentrer un pseudo et valide de ce dernier en demandant aux
- * utilisateurs distants leurs informations
- *
- */
- public void initPseudo() throws IOException {
- String tmpPseudo = JOptionPane.showInputDialog(null, "Enter nickname:"); // Read user input
-
- while(!(this.validatePseudo(tmpPseudo))) { // On demande aux autres utilisateurs de nous envoyer leurs informations et on test si le pseudo est déjà utilisé
- tmpPseudo = JOptionPane.showInputDialog(null, "Enter another nickname:"); // Read user input
- }
-
- this.pseudo = tmpPseudo;
- //sc1.close();
- JOptionPane.showMessageDialog(null ,"Your nickname : " + tmpPseudo + " is valid !");
- }
-
- public void TCPmessage(int index) throws IOException {
- Socket link=null;
- String s1;
- try {
- link=new Socket(this.userChatList.get(index).addIP,this.userChatList.get(index).portTCP);
-
- System.out.println("Server is listening on port"+this.portTCP+"of localhost");
- }catch(IOException e) {
-
- System.out.println("Server is not listening on port"+this.portTCP+" of localhost");
-
- }
- BufferedReader in=null;
- try {
- in = new BufferedReader(new InputStreamReader(link.getInputStream()));
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- try {
- PrintWriter out = new PrintWriter(link.getOutputStream(),true);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- String input;
- String s2 = (this.getPseudo()+" reçoit un message");
- try {
- while (!(input=in.readLine()).equals("end")) {
- System.out.print("client_recoit:"+input);
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- /*or (int i=0; i<4; i++) {
- System.out.println("client envoie");
- out.println("coucou \n");
- }
- out.println("end");*/
- try {
- link.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
-
- /**
- *
- * *tmpPseudo : String => Le pseudo à valider
- *
- * Envoi en broadcast (pour l'instant envoi sur les ports de notre ordinateur) d'une demande d'information
- *
- * On attend les réponses pendant 5 secondes
- *
- * On valide le pseudo en fonction des pseudos reçu
- *
- * On en profite pour ajouter les utilisateurs répondant à notre liste d'utilisateur distant (RemoteUser)
- *
- */
- public Boolean validatePseudo(String tmpPseudo) throws IOException {
-
-
- // Call broadcast
- 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";
-
- // Send to remote user 1
- DatagramPacket outPacket= new DatagramPacket(toSend.getBytes(), toSend.length(),broadcastIP, portUDPlistening_remoteUsr2);
- dgramSocket.send(outPacket);
-
- // Send to remote user 2
- outPacket= new DatagramPacket(toSend.getBytes(), toSend.length(),broadcastIP, portUDPlistening_remoteUsr3);
- dgramSocket.send(outPacket);
-
- // Initialisation des variables de la boucle
- Boolean valid = true;
-
- DatagramPacket inPacket;
- String response = null;
- String[] tabresponse= new String [4];
- dgramSocket.setSoTimeout(1000);
- Boolean arecu;
-
- 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++;
- inPacket= new DatagramPacket(buffer, buffer.length);
-
- arecu=true;
- try{
- dgramSocket.receive(inPacket);
- }catch (Exception e) {
- arecu=false;
- }
- buffer = inPacket.getData();
- response = new String(buffer);
-
- if(arecu) {
- // On découpe la réponse en tableau de string ([adresseIP,tcpPort,nickname])
- tabresponse = response.split(":");
-
- // Affichage de la réponse
- System.out.println("Remote user n°"+nbReponse+
- "\nIP : "+tabresponse[0]+
- "\nn°Port : "+tabresponse[1]+
- "\npseudo : "+tabresponse[2]);
-
- // Si reception on ajoute l'utilisateur à notre liste d'utilisateur distant
- this.addRemoteUser(InetAddress.getByName(tabresponse[0].split("/")[1]),Integer.parseInt(tabresponse[1]),tabresponse[2]);
- valid= (tmpPseudo.compareTo(tabresponse[2])!=0); // On regarde la différence entre notre pseudo et le pseudo reçu
-
- }
-
- newDate = new Date();
- }
- dgramSocket.close();
-
- if(!valid) {
- JOptionPane.showMessageDialog(null ,"Nickname : "+tmpPseudo +" is taken !");
- }
-
- return valid;
- }
-
- /**
- *
- * *remoteUserIP : InetAddress => l'adresse IP de l'utilisateur distant
- *
- * *remoteUserPortTCP : int => le numéro de port TCP d'écoute de l'utilisateur distant
- *
- * *remoteUserPseudo : String => le pseudo de l'utilisateur distant
- *
- * Ajout ou mise à jour l'utilisateur distant dans notre liste d'utilisateur distant
- *
- */
- public void addRemoteUser(InetAddress remoteUserIP, int remoteUserPortTCP,String remoteUserPseudo) {
- RemoteUser tmpRemoteUser = new RemoteUser(remoteUserIP,remoteUserPortTCP,remoteUserPseudo);
- int index = this.remoteUserList.indexOf(tmpRemoteUser);
- if(index!=-1) {
- System.out.println("("+this.pseudo+") - "+"MAJ, IP(port) of user : "+remoteUserPseudo+" => "+remoteUserIP+"("+remoteUserPortTCP+")");
- this.remoteUserList.set(index,tmpRemoteUser);
- }
- else {
- System.out.println("("+this.pseudo+") - "+"Add new user IP(port) of user : "+remoteUserPseudo+" => "+remoteUserIP+"("+remoteUserPortTCP+")");
- this.remoteUserList.add(tmpRemoteUser);
- }
- }
-
- /**
- *
- * En utilisant le port UDP d'envoi, on envoie 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);
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- // Construction du message à envoyer
- String toSend = this.addIP.toString()+":"+this.portTCP+":"+this.pseudo+":test";
-
- DatagramPacket outPacket =null;
-
- // Send information to usr2
- if(this.portUDPlistening!=portUDPlistening_remoteUsr2) {
- outPacket = new DatagramPacket(toSend.getBytes(), toSend.length(),this.addIP, portUDPlistening_remoteUsr2);
- try {
- dgramSocket.send(outPacket);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
- // Send information to usr3
- if(this.portUDPlistening!=portUDPlistening_remoteUsr3) {
-
- outPacket= new DatagramPacket(toSend.getBytes(), toSend.length(),this.addIP, portUDPlistening_remoteUsr3);
- try {
- dgramSocket.send(outPacket);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- dgramSocket.close();
- }
-
- /**
- *
- * On démarre un thread d'écoute UDP pour répondre au nouveaux utilisateurs,
- *
- * On démarre un thread d'écoute TCP pour commencer une conversation avec les utilisateurs actifs,
- *
- * On notifie les utilisateurs distants actifs de notre passage en mode actif (envoi de nos informations)
- *
- */
- private void active() {
- this.threadListeningUDP = new UserListeningThreadUDP("UDP Listening thread",this);
- this.threadListeningUDP.start();
-
- this.threadListeningTCP = new UserListeningThreadTCP("TCP main Listening thread",this);
- this.threadListeningTCP.start();
-
- notify_remote_user();
-
- this.actif=true;
- }
-
- /**
- *
- * 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
- * Laisse l'utilisateur choisir parmis la liste d'utilisateurs actifs celui avec lequel il souhaite échanger via un chat
- *
- */
- public void getOneActiveUser() throws IOException {
- this.printRemoteUserList();
- int index=Integer.parseInt(JOptionPane.showInputDialog(null, "Please, enter index of one active user that you saw on the list to start a conversation with:"));
-
- if (index >= 0 && index nom du thread
- * * user : User => utilisateur utilisant ce thread
- * $description
- * Création d'un socket d'écoute
- */
- public UserListeningThreadTCP(String s,User user) {
- super(s);
- this.myUser = user;
- /* try {
- this.dgramSocket = new DatagramSocket(this.myUser.getPortTCP(),this.myUser.getAddIP());
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- */
-
- }
-
- public void accept(ServerSocket servSocket) throws IOException {
- Socket socket_tcp= servSocket.accept();
- UserConnexionthreadTCP threadtcp= new UserConnexionthreadTCP("Chat_with_"+myUser.getPseudo(),myUser,socket_tcp);
- threadtcp.start();
- threadtcp.interrupt();
-
-
- }
-
- /* run
- * $description
- * écoutes les messages TCP tant que l'utilisateur est actif
- * Traitement
- * Si réception d'une demande, créer un
- */
- public void run(){
-
- // Tant que l'utilisateur est actif on attends la demande de nouvelle conversation
- while(true) {
-
- ServerSocket servSocket=null;
- try {
- servSocket = new ServerSocket(myUser.portTCP);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- try {
- this.accept(servSocket);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
-
- }
-
- }
-
- /* close
- * $description
- * ferme le socket d'écoute UDP
- * interrupt UDP listening threadS
- */
- public void close() {
- // this.dgramSocket.close();
- System.out.println("End of listing thread TCP ("+this.myUser.getPseudo()+")");
- try {
- this.interrupt();
- }catch (Exception e){
- e.printStackTrace();
- }
- }
-
-}
\ No newline at end of file
diff --git a/Application/Clavardage/src/UserListeningThreadUDP.java b/Application/Clavardage/src/UserListeningThreadUDP.java
deleted file mode 100644
index f40e491..0000000
--- a/Application/Clavardage/src/UserListeningThreadUDP.java
+++ /dev/null
@@ -1,114 +0,0 @@
-import java.io.IOException;
-import java.net.DatagramPacket;
-import java.net.DatagramSocket;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
-public class UserListeningThreadUDP extends Thread{
-
- private User myUser;
- private DatagramSocket dgramSocket=null;
-
- /* CONSTRUCTOR OF UserListeningThreadUDP
- * $parametres
- * * s : String => nom du thread
- * * user : User => utilisateur utilisant ce thread
- * $description
- * Création d'un socket d'écoute
- */
- public UserListeningThreadUDP(String s,User user) {
- super(s);
- this.myUser = user;
- try {
- this.dgramSocket = new DatagramSocket(this.myUser.getPortUDPlistening(),this.myUser.getAddIP());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- /* run
- * $description
- * écoutes les messages UDP tant que l'utilisateur est actif
- * Traitement
- * 1) Si demande d'information => envoi ses informations
- * 2) Si réception d'information => ajoute les informations
- */
- public void run(){
-
- // Tant que l'utilisateur est actif on attends les messages des nouveaux utilisateurs et changements des utilisateurs actifs
- while(true) {
-
- // Réception du message
- byte[] buffer = new byte[256];
- DatagramPacket inPacket= new DatagramPacket(buffer, buffer.length);
- try {
- dgramSocket.receive(inPacket);
- } catch (Exception e) {
- e.printStackTrace();
- }
- buffer = inPacket.getData();
-
- // Traitement en fonction du message reçu
- String receiveMsg = new String(buffer);
- String [] tabMsg = receiveMsg.split(":");
-
-
- // si demande d'information d'un nouvel utilisateur
- if(tabMsg.length==3) {
- InetAddress itsIP = null;
- try {
- itsIP = InetAddress.getByName(tabMsg[0].split("/")[1]); // On récupère l'adresse IP de l'utilisateur distant
- } catch (UnknownHostException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- int senderUDPport = Integer.parseInt(tabMsg[1]); // On récupère le port UDP de l'utilisateur distant
-
- String toSend = myUser.getAddIP().toString()+":"+myUser.getPortTCP()+":"+myUser.getPseudo()+":test";
- DatagramPacket outPacket= new DatagramPacket(toSend.getBytes(), toSend.length(),itsIP, senderUDPport);
-
- try {
- dgramSocket.send(outPacket);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- // Si un nouvel utilisateur passe en mode actif ou changement d'information
- else {
- try {
- // On récupère l'adresse IP et le port TCP de l'utilisateur distant et ajout à la liste de l'utilisateur utilisant ce thread
- this.myUser.addRemoteUser(InetAddress.getByName(tabMsg[0].split("/")[1]),Integer.parseInt(tabMsg[1]),tabMsg[2]);
- } catch (NumberFormatException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
-
- }
-
-
- }
-
- /* close
- * $description
- * ferme le socket d'écoute UDP
- * interrupt UDP listening threadS
- */
- public void close() {
- this.dgramSocket.close();
- System.out.println("End of listing thread UDP ("+this.myUser.getPseudo()+")");
- try {
- this.interrupt();
- }catch (Exception e){
- e.printStackTrace();
- }
- }
-}
-
-
-
diff --git a/Application/Clavardage/src/model/Chat.java b/Application/Clavardage/src/model/Chat.java
index e1c2064..9479352 100644
--- a/Application/Clavardage/src/model/Chat.java
+++ b/Application/Clavardage/src/model/Chat.java
@@ -8,6 +8,7 @@ public class Chat {
private int localUser_portTCP;
private int remoteUser_portTCP;
private ArrayList remoteUsersChatList = new ArrayList(); // listes des utilisateurs sur ce chat
+ private ArrayList messages = new ArrayList();
/**
* Constructor of Chat (local)
@@ -36,6 +37,9 @@ public class Chat {
public ArrayList getRemoteUsersChatList() {
return remoteUsersChatList;
}
+ public ArrayList getMessages() {
+ return messages;
+ }
/*** SETTERS ***/
public void setLocalUser_portTCP(int localUser_portTCP) {