diff --git a/Implementation/chatapp/.idea/modules/chatapp.iml b/Implementation/chatapp/.idea/modules/chatapp.iml index fd15dcb..73cec4e 100644 --- a/Implementation/chatapp/.idea/modules/chatapp.iml +++ b/Implementation/chatapp/.idea/modules/chatapp.iml @@ -2,6 +2,10 @@ + + + + diff --git a/Implementation/chatapp/.idea/vcs.xml b/Implementation/chatapp/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/Implementation/chatapp/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Implementation/chatapp/build/tmp/compileJava/source-classes-mapping.txt b/Implementation/chatapp/build/tmp/compileJava/source-classes-mapping.txt index a074e7b..7298c1b 100644 --- a/Implementation/chatapp/build/tmp/compileJava/source-classes-mapping.txt +++ b/Implementation/chatapp/build/tmp/compileJava/source-classes-mapping.txt @@ -1,13 +1,15 @@ +chatapp/Launcher.java + chatapp.Launcher chatapp/Model/ListUtilisateurs.java chatapp.Model.ListUtilisateurs -chatapp/Model/MessageHorodate.java - chatapp.Model.MessageHorodate chatapp/Model/Utilisateur.java chatapp.Model.Utilisateur chatapp/Model/Historique.java chatapp.Model.Historique -chatapp/Launcher.java - chatapp.Launcher +chatapp/Model/MessageHorodate.java + chatapp.Model.MessageHorodate +chatapp/Model/DataBase.java + chatapp.Model.DataBase chatapp/Protocol/RunnerEcouteTCP.java chatapp.Protocol.RunnerEcouteTCP chatapp/View/FenetreSession.java @@ -30,6 +32,7 @@ chatapp/Main.java chatapp.Main chatapp/View/Clavardage.java chatapp.View.Clavardage + chatapp.View.Clavardage$1 chatapp/Protocol/SessionClavardage.java chatapp.Protocol.SessionClavardage chatapp/View/ConnexionScreen.java diff --git a/Implementation/chatapp/src/main/java/chatapp/Controller/ChatApp.java b/Implementation/chatapp/src/main/java/chatapp/Controller/ChatApp.java index 227305a..7252438 100644 --- a/Implementation/chatapp/src/main/java/chatapp/Controller/ChatApp.java +++ b/Implementation/chatapp/src/main/java/chatapp/Controller/ChatApp.java @@ -1,9 +1,6 @@ package chatapp.Controller; -import chatapp.Model.Historique; -import chatapp.Model.ListUtilisateurs; -import chatapp.Model.MessageHorodate; -import chatapp.Model.Utilisateur; +import chatapp.Model.*; import chatapp.Protocol.*; import javafx.application.Application; import javafx.application.Platform; @@ -22,9 +19,7 @@ public class ChatApp implements PropertyChangeListener { /* Liste des utilisateurs actifs */ private ListUtilisateurs actifUsers ; - /* Map on l'on stocke localement les historiques des messages */ - private Map mapHistorique ; - private boolean historiqueAvailable = true; + /* ChatApp est associe a un utilisateur */ private Utilisateur me; @@ -36,7 +31,7 @@ public class ChatApp implements PropertyChangeListener { private static ChatApp chatapp = null; private RunnerEcouteTCP runnerEcouteTCP; private RunnerEcouteUDP runnerEcouteUDP; - + private DataBase db; /** * Constructeur de l'application de chat @@ -51,8 +46,9 @@ public class ChatApp implements PropertyChangeListener { ip = UDPEchange.getCurrentIp(); this.me = new Utilisateur(pseudo,port,ip); this.actifUsers.addList(getMe()); - this.mapHistorique = new HashMap() ; + this.main = main; + //this.db= DataBase.getInstance(); } public static synchronized ChatApp getInstance(String pseudo, Integer port, Application main){ @@ -66,14 +62,7 @@ public class ChatApp implements PropertyChangeListener { return chatapp; } - /** - * Mettre a jour dans Maphistorique, l'historique avec un utilisateur dont le nom est pseudo - * - * @param h nouvel Historique entre les deux utilisateurs - */ - public synchronized void majHistorique(Historique h) { - getMapHistorique().put(h.getUser2().getPseudo(),h); - } + /*public void majHistorique2(MessageHorodate mh, String pseudo) { Historique h = getMapHistorique().get(pseudo); @@ -81,18 +70,6 @@ public class ChatApp implements PropertyChangeListener { getMapHistorique().put(h.getUser2().getPseudo(),h); }*/ - public void majHistorique2(String mh, String pseudo) { - Historique h = getMapHistorique().get(pseudo); - MessageHorodate msghor = new MessageHorodate(this.getMe(),this.getMe(),"rien",1); - System.out.println(">>"+mh+"<<"); - System.out.print(msghor.getDateHorodatage()); - System.out.println(msghor.getDestinataire()); - System.out.println(msghor.getSource()); - System.out.println(msghor.getType()); - - h.addMessage(msghor); - getMapHistorique().put(h.getUser2().getPseudo(),h); - } /** * Modification du pseudo de l'utilisateur @@ -230,29 +207,8 @@ public class ChatApp implements PropertyChangeListener { 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 synchronized Historique getHist(String pseudo) { - Historique h = this.mapHistorique.get(pseudo); - if( h != null) { - return h ; - } - else { - h = new Historique(this.me, this.getActifUsers().getPseudoList(pseudo)); - return h ; - } - } + /*public static void main (String[] args) throws IOException { ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1]),this.app) ; @@ -285,13 +241,6 @@ public class ChatApp implements PropertyChangeListener { }*/ - public boolean isHistoriqueAvailable() { - return historiqueAvailable; - } - - public void setHistoriqueAvailable(boolean historiqueAvailable) { - this.historiqueAvailable = historiqueAvailable; - } @Override public void propertyChange(PropertyChangeEvent evt) { diff --git a/Implementation/chatapp/src/main/java/chatapp/Model/DataBase.java b/Implementation/chatapp/src/main/java/chatapp/Model/DataBase.java new file mode 100644 index 0000000..ef01281 --- /dev/null +++ b/Implementation/chatapp/src/main/java/chatapp/Model/DataBase.java @@ -0,0 +1,234 @@ +package chatapp.Model; +import java.io.IOException; +import java.sql.*; +import java.util.Date; +import java.sql.DriverManager; + +public class DataBase { + private String DBurl = "jdbc:mysql://srv-bdens.insa-toulouse.fr:3306" ; + private Connection connection = null; + private String login = "tp_servlet_006"; + private String pswd = "baePh9ei"; + + + /*Format de la table Utilisateurs + +--------+-------------+---------+---------------------+ + | ID | Pseudo | Actif | Date d'inscription | + +--------+-------------+---------+---------------------+ + Id correspond à l'addresse IP + Pseudo : Dernier Pseudo utilisé pour cette adresse IP, va etre remplacé par le pseudo actuel avec majPseudo + Date d'inscription comme son nom l'indique le jour de l'inscription de cette utilisateur + Actif est un boolean indicant si l'utilisateur est actif + + Chaque communication entres utilisateurs sera stocké dans une table de la forme + +------------------+-----------+---------------+---------------+ + | Destinataire | Source | Message | Date d'envoi | + +--------+---------------------+---------------+---------------+ + Destinataire -> Id du destinataire du message + Source -> Id de celui qui envoie le message + Message -> Msg envoye + Date d'envoie -> Date a laquelle Source a envoye le message a destinataire + */ + + private static DataBase instance = null; // Singleton + + public DataBase() { + try { + // Besoin d'installer le driver JDBC entre java IDE et le system DBMS pour faire un pont entre les deux + Class.forName("com.mysql.cj.jdbc.Driver"); + System.out.println("Driver Installe"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + System.out.println("Echec installation Driver"); + } + + try { + // Etablir une connexion , forme : (url, "myLogin", "myPassword"); + this.connection = DriverManager.getConnection("jdbc:mysql://localhost:8889/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "root"); + //this.connection = DriverManager.getConnection(this.DBurl,login,pswd); + System.out.println("Connexion Etablie"); + } catch (SQLException e) { + e.printStackTrace(); + System.out.println("Echec d'etablissement de la connexion"); + } + } + + public static DataBase getInstance() { + synchronized (DataBase.class) { + DataBase DB = instance; + if (DB == null) { + DB = new DataBase(); + } + return DB; + } + } + + /* + * Methode permettant de creer une table pour stocker les messages entre deux utilisateurs + * @param ID1 Id du premier utilisateur + * @param ID2 Id du second utilisateur + */ + public void CreationTableHistorique(String ID1 , String ID2) { + // Pour eviter d'avoir les tables en double + String petit; + String grand; + int comparaison = ID1.compareTo(ID2); + if (comparaison < 0) { + petit = ID1; + grand = ID2 ; + } + else { + petit = ID2; + grand = ID1 ; + } + String nomTable = "Chat_" + petit + "_" + grand ; + String Requete = "CREATE TABLE IF NOT EXISTS`" + nomTable +"` (\n" + "`Destinataire` varchar(100) NOT NULL,\n" + " `Source` varchar(100) NOT NULL,\n" + " `Envoi` timestamp NOT NULL,\n" + " `Message` text NOT NULL\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;"; + System.out.println(Requete); + PreparedStatement Ps = null ; + //Statement est utilisé pour envoyer une requete SQL à la base de donnee + try { + Ps = connection.prepareStatement(Requete); + System.out.println("Statement cree"); + } catch (SQLException e) { + e.printStackTrace(); + System.out.println("Echec creation Statement"); + } + + //Execute la donnée SQL statement passe en parametre + try { + Ps.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + System.out.println(" Echec executeUpdate "); + } + } + + /* + * Methode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee + * @param ID Id de l'utilisateur qui vient de changer de pseudo + * @param Pseudo Nouveau Pseudo de l'utilisateur + */ + public void majPseudo( String ID , String Pseudo) { + String requete= "UPDATE `Utilisateurs` SET `Pseudo`=? WHERE id=?"; + PreparedStatement Ps = null ; + //Statement est utilisé pour envoyer une requete SQL à la base de donnee + try { + Ps = connection.prepareStatement(requete); + Ps.setString(1, Pseudo); + Ps.setString(2, ID); + System.out.println("Statement cree"); + } catch (SQLException e) { + e.printStackTrace(); + System.out.println("Echec creation Statement"); + } + //Execute la donnée SQL statement passe en parametre + try { + Ps.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + System.out.println(" Echec executeUpdate "); + } + } + + + + /* + * Methode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee + * @param IDdest Id de l'utilisateur Destinataire du message + * @param IDdest Id de celui qui envoi le message + * @param Msg Message envoye entre les deux utilisateurs + */ + public void ajoutHistorique(String IDdest , String IDsrc, String Msg) { + String petit; + String grand; + int comparaison = IDdest.compareTo(IDsrc); + if (comparaison < 0) { + petit = IDdest; + grand = IDsrc ; + } + else { + petit = IDsrc; + grand = IDdest ; + } + String nomTable = "Chat_" + petit + "_" + grand ; + String requete= "INSERT INTO `"+ nomTable +"`(`Destinataire`, `Source`, `Message`) VALUES ( ? , ? , ?)"; + PreparedStatement Ps = null ; + //Statement est utilisé pour envoyer une requete SQL à la base de donnee + try { + Ps = connection.prepareStatement(requete); + Ps.setString(1, IDdest); + Ps.setString(2, IDsrc); + Ps.setString(3, Msg); + System.out.println("Statement cree"); + } catch (SQLException e) { + e.printStackTrace(); + System.out.println("Echec creation Statement"); + } + + //Execute la donnée SQL statement passe en parametre + try { + Ps.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + System.out.println(" Echec executeUpdate "); + } + } + + + /* + * Methode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee + * @param ID Id de l'utilisateur qui vient de se connecter pour la premiere fois + * @param Pseudo pseudo actuelle de l'utilisateur + */ + public void ajoutUtilisateurs(String ID , String Pseudo ) { + String requete= "INSERT INTO `Utilisateurs` (`ID`, `Pseudo`, `Actif`) VALUES ( ? , ? , '1')"; + PreparedStatement Ps = null ; + //Statement est utilisé pour envoyer une requete SQL à la base de donnee + try { + Ps = connection.prepareStatement(requete); + Ps.setString(1, ID); + Ps.setString(2, Pseudo); + System.out.println("Statement cree"); + } catch (SQLException e) { + e.printStackTrace(); + System.out.println("Echec creation Statement"); + } + + //Execute la donnée SQL statement passe en parametre + try { + Ps.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + System.out.println(" Echec executeUpdate "); + } + } + + /* + * Methode permettant de mettre a jour les utilisateurs actuellement actif + * @param ID Id de l'utilisateur qui vient de se connecter ou deconnecter + * @param connecte Boolean true si il est connecte , false sinon + */ + public void majUtilisateursActifs(Boolean Connecte, String Id) { + String requete= "UPDATE `Utilisateurs` SET `Actif`=? WHERE id=?"; + PreparedStatement Ps = null ; + Integer Actif = Connecte ? 1 : 0; + //Statement est utilisé pour envoyer une requete SQL à la base de donnee + try { + Ps = connection.prepareStatement(requete); + Ps.setInt(1, Actif); + Ps.setString(2, Id); + System.out.println("Statement cree"); + } catch (SQLException e) { + e.printStackTrace(); + System.out.println("Echec creation Statement"); + } + //Execute la donnée SQL statement passe en parametre + try { + Ps.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + System.out.println(" Echec executeUpdate "); + } + } + +} diff --git a/Implementation/chatapp/src/main/java/chatapp/Model/Historique.java b/Implementation/chatapp/src/main/java/chatapp/Model/Historique.java deleted file mode 100644 index 97cfbd6..0000000 --- a/Implementation/chatapp/src/main/java/chatapp/Model/Historique.java +++ /dev/null @@ -1,63 +0,0 @@ -package chatapp.Model; - -import java.util.ArrayList; - -/** - *

- * Classe permettant de sauvegarder les échanges entre deux utilisateurs - *

- */ -public class Historique { - private Utilisateur User1; - private Utilisateur User2; - // Liste conservant les differents échanges - private ArrayList HistoriqueHorodate ; - - /** - *

- * Constructeur : un historique sauvegarde les echanges entre - * User1 et User2 - * @param User1 - un utilisateur - * @param User2 - un second utilisateur - *

- */ - public Historique(Utilisateur User1, Utilisateur User2) { - this.User1 = User1; - this.User2 = User2; - this.HistoriqueHorodate = new ArrayList(); - } - - /** - *

- * On ajoute un message échangé dans la liste 'HistoriqueHorodate' - * - * @param mh - le message horodate échangé - *

- */ - public void addMessage(MessageHorodate mh) { - this.HistoriqueHorodate.add(mh); - } - - /** - *

- * getter pour recuperer le second utilisateur - *

- */ - public Utilisateur getUser2() { - return User2; - } - - public void afficher10derniers() { - System.out.println("Demarrage de l'affichage partiel de l'historique"); - System.out.println("Il y a actuellement " + HistoriqueHorodate.size() +" elements dans l'historique"); - int n =10; - if(HistoriqueHorodate.size()<=10) { - n = HistoriqueHorodate.size(); - } - for(int i = 0; i - * Classe representant les échanges TCP entre utilisateurs. - *

- */ -public class TCPEchange { - - /** - *

- * Equivalent a un handshake. - * L'utilisateur associé a app souhaite entamé une discussion avec User2 - * @param app L'app associé à l'utilisateur qui souhaite entamé la discussion - * @param User2 Le destinataire - *

- */ - public static void demarrerSession(ChatApp app,Utilisateur User2 ) throws IOException { - System.out.println("Demmarrage d'une session de clavardage"); - Socket s = new Socket(User2.getIp(),5000); - System.out.println("Socket de demarrage d'une session cree"); - //ExecutorService exec = Executors.newFixedThreadPool(1000); - Thread t1 = new Thread(new RunnerTCPEcoute(s,app)); - Thread t2 = new Thread(new RunnerTCPEnvoi(s,app,User2,false)); - t1.start(); - t2.start(); - try { - t1.join(); - t2.join(); - }catch(InterruptedException e) { - System.out.println("Un thread s'est arrete brusquement"); - } - System.out.println("Tout s'est passe creme"); - app.getHist(User2.getPseudo()).afficher10derniers(); - - } - - /*public static void envoiTCP(ChatApp app,Utilisateur User2, String Msg, int type ) { - // On cree un messagehorodate - MessageHorodate mh = new MessageHorodate(app.getMe(), User2, Msg, type); - if( type == 1 ) { - // on ajoute le msg à son historique - Historique h = app.getHist(User2.getPseudo()); - h.addMessage(mh); - // on update la liste des historiques de app - app.majHistorique(h); - } - - try { - Socket s = new Socket(User2.getIp(), User2.getPort()); - PrintStream output = new PrintStream(s.getOutputStream()); - output.println(mh.toString()); - output.close(); - s.close(); - } catch (Exception e) { - e.printStackTrace(); - } - }*/ - - - /** - *

- * Méthode pour qu'un objet de la classe ChatApp soit constamment en écoute de potentielles connexions - * @param app L'utilisateur en écoute de potentielles communications - *

- */ - public static void ecouteTCP(ChatApp app) { - ServerSocket ss = null; - ExecutorService exec = Executors.newFixedThreadPool(1000); - System.out.println("Ecoute TCP activee"); - try { - ss = new ServerSocket(5000); // On ecoute sur le port 5000 - System.out.println("Socket d'ecoute cree"); - while(true) { // Ecoute en boucle - System.out.println("Attente Session de clavardage"); - Socket link = ss.accept(); // Blocante - exec.submit(new RunnerTCPEcoute(link,app)); // On crée un thread qui va gerer la connexion recu - System.out.println("L'ecoute TCP continue apres le premier thread demarre"); - } - } - catch (Exception e) { - e.printStackTrace(); - } - } -} - - -/** - *

- * Classe representant les threads s'occupant de l'envoie de messages en utilisant le protocole TCP. - * Cette classe implemente l'interface Runnable. - *

- */ -class RunnerTCPEnvoi implements Runnable { - private Socket link; - private ChatApp app ; - private Utilisateur Destinataire; - final BufferedReader in; - final PrintWriter out; - final Scanner sc=new Scanner(System.in); - private boolean bonjourEnvoye = false; - - /** - *

- * Constructeur de la classe RunnerTCPEnvoi - * @param link - * @param app Un objet ChatApp dont l'utilisateur associé souhaite entame une discussion - * @param user2 Destinataire - * @param bonjour Boolean true si c'est le debut d'une connexion, false sinon - *

- */ - public RunnerTCPEnvoi(Socket link,ChatApp app, Utilisateur user2, boolean bonjour ) throws IOException { - this.link = link; - this.app = app; - this.Destinataire = user2; - this.out = new PrintWriter(link.getOutputStream()); - this.in = new BufferedReader (new InputStreamReader (link.getInputStream())); - this.bonjourEnvoye = bonjour; - } - - @Override - public void run() { - System.out.println("Creation d'un thread d'envoi"); - String msg; - - while(true){ - if(!bonjourEnvoye) { // bonjourEnvoye est a false si c'est le debut d'une communication - MessageHorodate mh = new MessageHorodate(Destinataire,app.getMe(),"Bonjour",2); - bonjourEnvoye = true; - System.out.println("Envoi d'un bonjour"); - out.println(mh); - out.flush(); - } - else { - try { - msg = sc.nextLine(); - }catch(NoSuchElementException e) { - break; - } - MessageHorodate mh = new MessageHorodate(Destinataire,app.getMe(),msg,1); - if(msg.equals("--STOP--")) { - mh = new MessageHorodate(Destinataire,app.getMe(),msg,0); // ENVOYER JUSTE --STOP-- SUFFIT - out.println(mh); - out.flush(); - break; - } - /* while(!app.isHistoriqueAvailable()) { - try{wait(); - }catch(InterruptedException e) {} - }*/ - //app.setHistoriqueAvailable(false); - synchronized( this.app.getMapHistorique()) { - Historique h = app.getHist(Destinataire.getPseudo()); - h.addMessage(mh); - app.majHistorique(h); - } - - // on update la liste des historiques de app - - //app.majHistorique2(mh.toString(),Destinataire.getPseudo()); - //app.setHistoriqueAvailable(false); - //notifyAll(); - out.println(mh); - System.out.println("Envoi d'un mesage"); - out.flush(); - } - } - try { - System.out.println("Fermeture du thread d'envoi"); - in.close(); - link.close(); - }catch(Exception e) { - // Gestion de l'exception de la fermeture de la socket - } - } - -} - - - -/** - *

- * Classe representant les threads s'occupant de la reception de messages en utilisant le protocole TCP. - * Cette classe implemente l'interface Runnable. - *

- */ -class RunnerTCPEcoute implements Runnable { - final Socket link; - private ChatApp app ; - private Utilisateur u2; - private boolean u2Initialise; - public RunnerTCPEcoute(Socket link,ChatApp app ) { - this.link = link; - this.app = app; - this.u2Initialise=false; - } - - @Override - public void run() { - System.out.println("Creation d'un thread d'ecoute"); - try { - PrintStream output = new PrintStream(link.getOutputStream()); - //InputStream is = link.getInputStream(); - BufferedReader in = new BufferedReader (new InputStreamReader (link.getInputStream())); - - String line = ""; - String dest = ""; - String src = ""; - String type = ""; - String date = ""; - String payload = ""; - String msg = ""; - line = in.readLine(); - while (line != null) { - - - if(line.split("::")[0].equals("Destinataire")) { - if(msg.equals("")) { - dest = line+"\n"; - msg="."; - } - else { - msg=dest+src+type+date+payload; - payload = ""; - MessageHorodate mh = MessageHorodate.stringToMessageHorodate(msg); - System.out.println("Type du message:"+mh.getType()); - if(mh.getType()==1) { - /*while(!app.isHistoriqueAvailable()) { - try{wait(); - }catch(InterruptedException e) {} - } - app.setHistoriqueAvailable(false);*/ - System.out.println("Historique mis à jour lors de la reception"); - Historique h = app.getHist(mh.getSource().getPseudo()); - h.addMessage(mh); - app.majHistorique(h); - //app.setHistoriqueAvailable(true); - //notifyAll(); - //app.majHistorique2(mh,mh.getSource().getPseudo()); - } - else if(mh.getType()==0) { - break; - } - - } - } - else if(line.split("::")[0].equals("Source")) { - src = line+"\n"; - if(!u2Initialise) { - u2=Utilisateur.stringToUtilisateur(src.split("::")[1].replaceAll("\n", "")); - System.out.println("u2Initialise !"); - u2Initialise = true; - } - } - else if(line.split("::")[0].equals("Type")) { - if(line.split("::")[1].equals("2")) { - System.out.println("Bonjour recu!"); - //System.out.println(src.split("::")[1].replaceAll("\n", "")); - u2=Utilisateur.stringToUtilisateur(src.split("::")[1].replaceAll("\n", "")); - u2Initialise = true; - System.out.println("Pseudo du poto: >>"+u2.getPseudo()+"<<"); - Thread t = new Thread(new RunnerTCPEnvoi(link,app,u2,true)); - t.start(); - System.out.println("Thread d'envoi envoye"); - } - type = line+"\n"; - } - else if(line.split("::")[0].equals("Date")) { - date = line+"\n"; - } - else if(line.split("::")[0].equals("Message")){ - payload = line+"\n"; - - } - else { - payload += line+"\n"; - } - - System.out.println("Received: "+ line); - line = in.readLine(); - - - } - System.out.println("Affichage de l'histo"); - System.out.println("Pseudo du poto: >>"+u2.getPseudo()+"<<"); - app.getHist(u2.getPseudo()).afficher10derniers(); - in.close(); - link.close(); - } catch (IOException e) { - //e.printStackTrace(); - } finally { - System.out.println("Finishing thread"); - System.out.println("Affichage de l'histo"); - System.out.println("Pseudo du poto: >>"+u2.getPseudo()+"<<"); - app.getHist(u2.getPseudo()).afficher10derniers(); - - - } - - } -} diff --git a/Implementation/chatapp/src/main/java/chatapp/View/Clavardage.java b/Implementation/chatapp/src/main/java/chatapp/View/Clavardage.java index ac34cdc..c02623f 100644 --- a/Implementation/chatapp/src/main/java/chatapp/View/Clavardage.java +++ b/Implementation/chatapp/src/main/java/chatapp/View/Clavardage.java @@ -10,6 +10,7 @@ import chatapp.Controller.ChatApp; import chatapp.Model.MessageHorodate; import chatapp.Model.Utilisateur; import chatapp.Protocol.SessionClavardage; +import javafx.application.Platform; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; @@ -17,6 +18,7 @@ import javafx.scene.control.Button; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.scene.text.Text; +import javafx.stage.Stage; public class Clavardage implements Initializable, PropertyChangeListener { @@ -83,6 +85,15 @@ public class Clavardage implements Initializable, PropertyChangeListener { msg+=": "+msgh.getMessage(); ChatText.appendText(msg); break; + case "FinDeLaSession" : + this.session.arretSession(); + Platform.runLater(new Runnable() { + @Override + public void run() { + Stage stage = (Stage) AEnvoyer.getScene().getWindow(); + stage.close(); + } + }); } }