Nouvelle interface graphique

Cette révision appartient à :
Nabzzz 2020-12-26 23:14:00 +01:00
Parent 8794238d89
révision c4eccf38a9
8 fichiers modifiés avec 269 ajouts et 447 suppressions

Voir le fichier

@ -2,6 +2,10 @@
<module external.linked.project.id="chatapp" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="org.example" external.system.module.version="1.0-SNAPSHOT" type="JAVA_MODULE" version="4"> <module external.linked.project.id="chatapp" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="org.example" external.system.module.version="1.0-SNAPSHOT" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true"> <component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output /> <exclude-output />
<content url="file://$MODULE_DIR$/../..">
<excludeFolder url="file://$MODULE_DIR$/../../.gradle" />
<excludeFolder url="file://$MODULE_DIR$/../../build" />
</content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>

Voir le fichier

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>

Voir le fichier

@ -1,13 +1,15 @@
chatapp/Launcher.java
chatapp.Launcher
chatapp/Model/ListUtilisateurs.java chatapp/Model/ListUtilisateurs.java
chatapp.Model.ListUtilisateurs chatapp.Model.ListUtilisateurs
chatapp/Model/MessageHorodate.java
chatapp.Model.MessageHorodate
chatapp/Model/Utilisateur.java chatapp/Model/Utilisateur.java
chatapp.Model.Utilisateur chatapp.Model.Utilisateur
chatapp/Model/Historique.java chatapp/Model/Historique.java
chatapp.Model.Historique chatapp.Model.Historique
chatapp/Launcher.java chatapp/Model/MessageHorodate.java
chatapp.Launcher chatapp.Model.MessageHorodate
chatapp/Model/DataBase.java
chatapp.Model.DataBase
chatapp/Protocol/RunnerEcouteTCP.java chatapp/Protocol/RunnerEcouteTCP.java
chatapp.Protocol.RunnerEcouteTCP chatapp.Protocol.RunnerEcouteTCP
chatapp/View/FenetreSession.java chatapp/View/FenetreSession.java
@ -30,6 +32,7 @@ chatapp/Main.java
chatapp.Main chatapp.Main
chatapp/View/Clavardage.java chatapp/View/Clavardage.java
chatapp.View.Clavardage chatapp.View.Clavardage
chatapp.View.Clavardage$1
chatapp/Protocol/SessionClavardage.java chatapp/Protocol/SessionClavardage.java
chatapp.Protocol.SessionClavardage chatapp.Protocol.SessionClavardage
chatapp/View/ConnexionScreen.java chatapp/View/ConnexionScreen.java

Voir le fichier

@ -1,9 +1,6 @@
package chatapp.Controller; package chatapp.Controller;
import chatapp.Model.Historique; import chatapp.Model.*;
import chatapp.Model.ListUtilisateurs;
import chatapp.Model.MessageHorodate;
import chatapp.Model.Utilisateur;
import chatapp.Protocol.*; import chatapp.Protocol.*;
import javafx.application.Application; import javafx.application.Application;
import javafx.application.Platform; import javafx.application.Platform;
@ -22,9 +19,7 @@ public class ChatApp implements PropertyChangeListener {
/* Liste des utilisateurs actifs */ /* Liste des utilisateurs actifs */
private ListUtilisateurs actifUsers ; private ListUtilisateurs actifUsers ;
/* Map on l'on stocke localement les historiques des messages */
private Map<String, Historique> mapHistorique ;
private boolean historiqueAvailable = true;
/* ChatApp est associe a un utilisateur */ /* ChatApp est associe a un utilisateur */
private Utilisateur me; private Utilisateur me;
@ -36,7 +31,7 @@ public class ChatApp implements PropertyChangeListener {
private static ChatApp chatapp = null; private static ChatApp chatapp = null;
private RunnerEcouteTCP runnerEcouteTCP; private RunnerEcouteTCP runnerEcouteTCP;
private RunnerEcouteUDP runnerEcouteUDP; private RunnerEcouteUDP runnerEcouteUDP;
private DataBase db;
/** /**
* Constructeur de l'application de chat * Constructeur de l'application de chat
@ -51,8 +46,9 @@ public class ChatApp implements PropertyChangeListener {
ip = UDPEchange.getCurrentIp(); ip = UDPEchange.getCurrentIp();
this.me = new Utilisateur(pseudo,port,ip); this.me = new Utilisateur(pseudo,port,ip);
this.actifUsers.addList(getMe()); this.actifUsers.addList(getMe());
this.mapHistorique = new HashMap<String,Historique>() ;
this.main = main; this.main = main;
//this.db= DataBase.getInstance();
} }
public static synchronized ChatApp getInstance(String pseudo, Integer port, Application main){ public static synchronized ChatApp getInstance(String pseudo, Integer port, Application main){
@ -66,14 +62,7 @@ public class ChatApp implements PropertyChangeListener {
return chatapp; 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) { /*public void majHistorique2(MessageHorodate mh, String pseudo) {
Historique h = getMapHistorique().get(pseudo); Historique h = getMapHistorique().get(pseudo);
@ -81,18 +70,6 @@ public class ChatApp implements PropertyChangeListener {
getMapHistorique().put(h.getUser2().getPseudo(),h); 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 * Modification du pseudo de l'utilisateur
@ -230,29 +207,8 @@ public class ChatApp implements PropertyChangeListener {
return actifUsers; return actifUsers;
} }
/**
* Getter
* @return la map des historiques
*/
public Map<String,Historique> 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 { /*public static void main (String[] args) throws IOException {
ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1]),this.app) ; 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 @Override
public void propertyChange(PropertyChangeEvent evt) { public void propertyChange(PropertyChangeEvent evt) {

Voir le fichier

@ -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 ");
}
}
}

Voir le fichier

@ -1,63 +0,0 @@
package chatapp.Model;
import java.util.ArrayList;
/**
* <p>
* Classe permettant de sauvegarder les échanges entre deux utilisateurs
* </p>
*/
public class Historique {
private Utilisateur User1;
private Utilisateur User2;
// Liste conservant les differents échanges
private ArrayList<MessageHorodate> HistoriqueHorodate ;
/**
* <p>
* Constructeur : un historique sauvegarde les echanges entre
* User1 et User2
* @param User1 - un utilisateur
* @param User2 - un second utilisateur
* </p>
*/
public Historique(Utilisateur User1, Utilisateur User2) {
this.User1 = User1;
this.User2 = User2;
this.HistoriqueHorodate = new ArrayList<MessageHorodate>();
}
/**
* <p>
* On ajoute un message échangé dans la liste 'HistoriqueHorodate'
*
* @param mh - le message horodate échangé
* </p>
*/
public void addMessage(MessageHorodate mh) {
this.HistoriqueHorodate.add(mh);
}
/**
* <p>
* getter pour recuperer le second utilisateur
* </p>
*/
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<n;i++) {
String exp = HistoriqueHorodate.get(i).getSource().getPseudo();
String payload = HistoriqueHorodate.get(i).getMessage();
System.out.println(exp+" : "+payload);
}
}
}

Voir le fichier

@ -1,322 +0,0 @@
package chatapp.Protocol;
import java.io.InputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.OutputStream;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import chatapp.Controller.*;
import chatapp.Model.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* <p>
* Classe representant les échanges TCP entre utilisateurs.
* </p>
*/
public class TCPEchange {
/**
* <p>
* 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
* </p>
*/
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();
}
}*/
/**
* <p>
* ©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
* </p>
*/
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();
}
}
}
/**
* <p>
* Classe representant les threads s'occupant de l'envoie de messages en utilisant le protocole TCP.
* Cette classe implemente l'interface Runnable.
* </p>
*/
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;
/**
* <p>
* 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
* </p>
*/
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
}
}
}
/**
* <p>
* Classe representant les threads s'occupant de la reception de messages en utilisant le protocole TCP.
* Cette classe implemente l'interface Runnable.
* </p>
*/
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();
}
}
}

Voir le fichier

@ -10,6 +10,7 @@ import chatapp.Controller.ChatApp;
import chatapp.Model.MessageHorodate; import chatapp.Model.MessageHorodate;
import chatapp.Model.Utilisateur; import chatapp.Model.Utilisateur;
import chatapp.Protocol.SessionClavardage; import chatapp.Protocol.SessionClavardage;
import javafx.application.Platform;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
@ -17,6 +18,7 @@ import javafx.scene.control.Button;
import javafx.scene.control.TextArea; import javafx.scene.control.TextArea;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import javafx.stage.Stage;
public class Clavardage implements Initializable, PropertyChangeListener { public class Clavardage implements Initializable, PropertyChangeListener {
@ -83,6 +85,15 @@ public class Clavardage implements Initializable, PropertyChangeListener {
msg+=": "+msgh.getMessage(); msg+=": "+msgh.getMessage();
ChatText.appendText(msg); ChatText.appendText(msg);
break; break;
case "FinDeLaSession" :
this.session.arretSession();
Platform.runLater(new Runnable() {
@Override
public void run() {
Stage stage = (Stage) AEnvoyer.getScene().getWindow();
stage.close();
}
});
} }
} }