From c4eccf38a97401ec0ae04cce52e731b04b9e26ba Mon Sep 17 00:00:00 2001
From: Nabzzz
Date: Sat, 26 Dec 2020 23:14:00 +0100
Subject: [PATCH] Nouvelle interface graphique
---
.../chatapp/.idea/modules/chatapp.iml | 4 +
Implementation/chatapp/.idea/vcs.xml | 6 +
.../compileJava/source-classes-mapping.txt | 11 +-
.../main/java/chatapp/Controller/ChatApp.java | 65 +---
.../src/main/java/chatapp/Model/DataBase.java | 234 +++++++++++++
.../main/java/chatapp/Model/Historique.java | 63 ----
.../java/chatapp/Protocol/TCPEchange.java | 322 ------------------
.../main/java/chatapp/View/Clavardage.java | 11 +
8 files changed, 269 insertions(+), 447 deletions(-)
create mode 100644 Implementation/chatapp/.idea/vcs.xml
create mode 100644 Implementation/chatapp/src/main/java/chatapp/Model/DataBase.java
delete mode 100644 Implementation/chatapp/src/main/java/chatapp/Model/Historique.java
delete mode 100644 Implementation/chatapp/src/main/java/chatapp/Protocol/TCPEchange.java
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();
+ }
+ });
}
}