Nettoyage du code
Bu işleme şunda yer alıyor:
ebeveyn
7103a2b584
işleme
4f47290542
18 değiştirilmiş dosya ile 318 ekleme ve 276 silme
|
@ -1,6 +1,5 @@
|
|||
package chatapp.Controller;
|
||||
|
||||
import chatapp.Model.DataBase;
|
||||
import chatapp.Model.ListUtilisateurs;
|
||||
import chatapp.Model.Utilisateur;
|
||||
import chatapp.Protocol.*;
|
||||
|
@ -30,20 +29,34 @@ public class ChatApp implements PropertyChangeListener {
|
|||
/* Liste des utilisateurs actifs */
|
||||
private ListUtilisateurs actifUsers ;
|
||||
|
||||
private boolean isExterne; // TRUE si l'utilisateur est externe au reseau FALSE s'il est interne
|
||||
/* TRUE si l'utilisateur est externe au reseau FALSE s'il est interne */
|
||||
private boolean isExterne;
|
||||
|
||||
private HttpEchange externeEchange;
|
||||
|
||||
/* ChatApp est associe a un utilisateur */
|
||||
private Utilisateur me;
|
||||
|
||||
/* ChatApp est associe a une application qui le lance et que chatapp doit fermer a la fin */
|
||||
private Application main;
|
||||
|
||||
/* Instance de ChatApp */
|
||||
private static ChatApp chatapp = null;
|
||||
|
||||
/* Gérer les multiples connexions en TCP. */
|
||||
private RunnerEcouteTCP runnerEcouteTCP;
|
||||
|
||||
/* Gérer les multiples connexions en UDP. */
|
||||
private RunnerEcouteUDP runnerEcouteUDP;
|
||||
|
||||
/* TRUE si l'utilisateur est connecte au reseau FALSE sinon */
|
||||
private boolean connecte;
|
||||
|
||||
/* Acces a la base de donnée */
|
||||
//private DataBase db;
|
||||
public ArrayList<String> ListeCommunication = new ArrayList<>();
|
||||
|
||||
/* Variable stockant les communications grâce aux IDs des utilisateurs */
|
||||
public ArrayList<String> listeCommunication = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* <p> Getter : Connecte
|
||||
|
@ -62,8 +75,7 @@ public class ChatApp implements PropertyChangeListener {
|
|||
*/
|
||||
public ChatApp(String pseudo, Integer port, Application main){
|
||||
this.actifUsers = new ListUtilisateurs() ;
|
||||
// Recuperer adresse IP de l'utilisateur
|
||||
InetAddress ip = UDPEchange.getCurrentIp();
|
||||
InetAddress ip = UDPEchange.getCurrentIp(); // Recuperer adresse IP de l'utilisateur
|
||||
this.me = new Utilisateur(pseudo,port,ip);
|
||||
this.actifUsers.addList(getMe());
|
||||
this.main = main;
|
||||
|
@ -144,9 +156,9 @@ public class ChatApp implements PropertyChangeListener {
|
|||
* @return False si modiferPseudo a échoué, True sinon
|
||||
*/
|
||||
public Boolean modifierPseudoInterne(String nouveau) throws IOException {
|
||||
// Message que l'on envoie à tous les utilisateurs actifs
|
||||
// Message que l'on envoie à tous les utilisateurs actifs
|
||||
String broadcastMessage = "Demande Modification Pseudo\n" + this.getMe().toString() + "\n" + nouveau + "\n";
|
||||
UDPEchange.EnvoiBroadcast(broadcastMessage);
|
||||
UDPEchange.envoiBroadcast(broadcastMessage);
|
||||
try {
|
||||
Thread.sleep(2000);
|
||||
/* L'utilisateur doit attendre la reponse de tous les utilisateurs connectes
|
||||
|
@ -159,7 +171,7 @@ public class ChatApp implements PropertyChangeListener {
|
|||
System.out.println("Modification pseudo reussi");
|
||||
//Envoi un msg en broadcast a tout les utilisateurs pour les prevenir de son nouveau pseudo//
|
||||
broadcastMessage = "Modification pseudo reussi\n" + this.getMe().toString() + "\n" + nouveau + "\n";
|
||||
UDPEchange.EnvoiBroadcast(broadcastMessage);
|
||||
UDPEchange.envoiBroadcast(broadcastMessage);
|
||||
//-------Change son propre nom d'utilisateur-------//
|
||||
this.getActifUsers().modifierList(this.getMe().getPseudo(), nouveau);
|
||||
this.getMe().setPseudo(nouveau);
|
||||
|
@ -226,10 +238,10 @@ public class ChatApp implements PropertyChangeListener {
|
|||
* @throws IOException
|
||||
*/
|
||||
public Boolean connexionInterne(String pseudo) throws IOException {
|
||||
// Message que l'on envoie à tous les utilisateurs actifs
|
||||
// Message que l'on envoie à tous les utilisateurs actifs
|
||||
this.me.setPseudo(pseudo);
|
||||
String broadcastMessage = "Connexion\n" + this.getMe().toString() ;
|
||||
UDPEchange.EnvoiBroadcast(broadcastMessage);
|
||||
UDPEchange.envoiBroadcast(broadcastMessage);
|
||||
try {
|
||||
Thread.sleep(2000); // L'utilisateur doit attendre la reponse de tous les utilisateurs connectes
|
||||
} catch (InterruptedException e) {
|
||||
|
@ -297,8 +309,7 @@ public class ChatApp implements PropertyChangeListener {
|
|||
*
|
||||
*/
|
||||
private void deconnexionExterne() throws IOException{
|
||||
// A IMPLEMENTER
|
||||
System.out.println("Deco lancee");
|
||||
System.out.println("Deconnexion lancee");
|
||||
boolean deco = false;
|
||||
try {
|
||||
deco = externeEchange.sendPost("Deconnexion");
|
||||
|
@ -320,7 +331,6 @@ public class ChatApp implements PropertyChangeListener {
|
|||
}
|
||||
Platform.exit();
|
||||
System.exit(0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -330,9 +340,9 @@ public class ChatApp implements PropertyChangeListener {
|
|||
* @throws IOException
|
||||
*/
|
||||
public void deconnexionInterne() throws IOException {
|
||||
// Message que l'on envoie à tous les utilisateurs actifs
|
||||
// Message que l'on envoie à tous les utilisateurs actifs
|
||||
String broadcastMessage = "Deconnexion\n" + this.getMe().toString() ;
|
||||
UDPEchange.EnvoiBroadcast(broadcastMessage);
|
||||
UDPEchange.envoiBroadcast(broadcastMessage);
|
||||
//db.majUtilisateursActifs(false,this.me.getId());
|
||||
this.connecte=false;
|
||||
try {
|
||||
|
@ -422,7 +432,7 @@ public class ChatApp implements PropertyChangeListener {
|
|||
public ArrayList<Utilisateur> createListeCommunicationPossible(){
|
||||
ArrayList<Utilisateur> communication = new ArrayList<>();
|
||||
for ( Utilisateur element : this.actifUsers.getActifUsers()){
|
||||
if ( ! this.ListeCommunication.contains(element.getId())){
|
||||
if ( ! this.listeCommunication.contains(element.getId())){
|
||||
communication.add(element);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,14 +4,16 @@ import chatapp.Controller.ChatApp;
|
|||
import javafx.application.Application;
|
||||
import javafx.application.Platform;
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.geometry.Rectangle2D;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Screen;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Cette classe extends Application.
|
||||
* <br> Elle va permettre de faire le lien avec JavaFX.
|
||||
*/
|
||||
public class Main extends Application {
|
||||
|
||||
/* Instance de ChatApp */
|
||||
ChatApp chatapp;
|
||||
|
||||
/**
|
||||
|
@ -21,7 +23,6 @@ public class Main extends Application {
|
|||
*/
|
||||
@Override
|
||||
public void start(Stage primaryStage) throws Exception {
|
||||
//Rectangle2D tailleEcran = Screen.getPrimary().getBounds();
|
||||
this.chatapp = ChatApp.getInstance("Null",1234,this);
|
||||
FXMLLoader fichier = new FXMLLoader(getClass().getResource("/fenetres/ConnexionScreen.fxml"));
|
||||
Scene scene1 = new Scene(fichier.load(),600,400);
|
||||
|
@ -29,15 +30,10 @@ public class Main extends Application {
|
|||
primaryStage.setTitle("ChatApp");
|
||||
primaryStage.setMinWidth(600);
|
||||
primaryStage.setMinHeight(400);
|
||||
//primaryStage.setMaxWidth(600);
|
||||
//primaryStage.setMaxHeight(400);
|
||||
/*primaryStage.setMaxWidth(tailleEcran.getWidth());
|
||||
primaryStage.setMaxHeight(tailleEcran.getHeight());*/
|
||||
primaryStage.show();
|
||||
primaryStage.centerOnScreen();
|
||||
chatapp.activerEcouteTCP();
|
||||
chatapp.activerEcouteUDP();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -48,8 +44,7 @@ public class Main extends Application {
|
|||
public void stop() throws Exception {
|
||||
if(chatapp.isConnecte()){
|
||||
chatapp.deconnexion();
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
super.stop();
|
||||
Platform.exit();
|
||||
System.exit(0);
|
||||
|
|
|
@ -26,12 +26,21 @@ import java.sql.*;
|
|||
* <br> - Date d'envoi : Date a laquelle Source a envoyé le message à destinataire
|
||||
*/
|
||||
public class DataBase {
|
||||
private final String DBurl = "jdbc:mysql://srv-bdens.insa-toulouse.fr:3306/tp_servlet_006?" ;
|
||||
|
||||
/* URL pour accéder à la BDD */
|
||||
private final String dBurl = "jdbc:mysql://srv-bdens.insa-toulouse.fr:3306/tp_servlet_006?" ;
|
||||
|
||||
/* Connection avec la BDD */
|
||||
private Connection connection = null;
|
||||
|
||||
/* Login pour se connecter à la BDD */
|
||||
private final String login = "tp_servlet_006";
|
||||
|
||||
/* Mdp pour se connecter à la BDD */
|
||||
private final String pswd = "baePh9ei";
|
||||
|
||||
private static final DataBase instance = null; // Singleton
|
||||
/* Singleton */
|
||||
private static final DataBase instance = null;
|
||||
|
||||
/**
|
||||
* Constructeur de la database
|
||||
|
@ -52,7 +61,7 @@ public class DataBase {
|
|||
//this.connection = DriverManager.getConnection("jdbc:mysql://localhost/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "1234");
|
||||
// Auriane : DECOMMENTER CETTE LIGNE
|
||||
//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);
|
||||
this.connection = DriverManager.getConnection(this.dBurl,login,pswd);
|
||||
System.out.println("Connexion Etablie");
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
|
@ -72,29 +81,29 @@ public class DataBase {
|
|||
|
||||
/**
|
||||
* Methode permettant de créer une table pour stocker les messages entre deux utilisateurs
|
||||
* @param ID1 Id du premier utilisateur
|
||||
* @param ID2 Id du second utilisateur
|
||||
* @param iD1 Id du premier utilisateur
|
||||
* @param iD2 Id du second utilisateur
|
||||
*/
|
||||
public void CreationTableHistorique(String ID1 , String ID2) {
|
||||
public void creationTableHistorique(String iD1 , String iD2) {
|
||||
// Pour eviter d'avoir les tables en double
|
||||
String petit;
|
||||
String grand;
|
||||
int comparaison = ID1.compareTo(ID2);
|
||||
int comparaison = iD1.compareTo(iD2);
|
||||
if (comparaison < 0) {
|
||||
petit = ID1;
|
||||
grand = ID2 ;
|
||||
petit = iD1;
|
||||
grand = iD2 ;
|
||||
}
|
||||
else {
|
||||
petit = ID2;
|
||||
grand = ID1 ;
|
||||
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 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n" + " `Message` text NOT NULL\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;";
|
||||
System.out.println(Requete);
|
||||
PreparedStatement Ps = null ;
|
||||
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 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\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);
|
||||
ps = connection.prepareStatement(requete);
|
||||
System.out.println("Statement cree");
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
|
@ -102,8 +111,8 @@ public class DataBase {
|
|||
}
|
||||
//Execute la donnée SQL statement passe en parametre
|
||||
try {
|
||||
assert Ps != null;
|
||||
Ps.executeUpdate();
|
||||
assert ps != null;
|
||||
ps.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
System.out.println(" Echec executeUpdate ");
|
||||
|
@ -112,17 +121,17 @@ public class DataBase {
|
|||
|
||||
/**
|
||||
* Méthode 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
|
||||
* @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) {
|
||||
public void majPseudo( String iD , String pseudo) {
|
||||
String requete= "UPDATE `Utilisateurs` SET `Pseudo`=? WHERE id=?";
|
||||
PreparedStatement Ps = null ;
|
||||
PreparedStatement ps = null ;
|
||||
//Statement est utilisé pour envoyer une requete SQL à la base de donnee
|
||||
try {
|
||||
Ps = connection.prepareStatement(requete);
|
||||
Ps.setString(1, Pseudo); // ? n°1 devient la valeur contenu dans Pseudo
|
||||
Ps.setString(2, ID); // ? n°2 devient la valeur contenu dans ID
|
||||
ps = connection.prepareStatement(requete);
|
||||
ps.setString(1, pseudo); // ? n°1 devient la valeur contenu dans Pseudo
|
||||
ps.setString(2, iD); // ? n°2 devient la valeur contenu dans ID
|
||||
System.out.println("Statement cree");
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
|
@ -130,8 +139,8 @@ public class DataBase {
|
|||
}
|
||||
//Execute la donnée SQL statement passe en parametre
|
||||
try {
|
||||
assert Ps != null;
|
||||
Ps.executeUpdate();
|
||||
assert ps != null;
|
||||
ps.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
System.out.println(" Echec executeUpdate ");
|
||||
|
@ -142,31 +151,31 @@ public class DataBase {
|
|||
|
||||
/**
|
||||
* Méthode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnée
|
||||
* @param IDdest Id de l'utilisateur Destinataire du message
|
||||
* @param IDsrc Id de celui qui envoi le message
|
||||
* @param Msg Message envoye entre les deux utilisateurs
|
||||
* @param iDdest Id de l'utilisateur Destinataire du message
|
||||
* @param iDsrc Id de celui qui envoi le message
|
||||
* @param msg Message envoye entre les deux utilisateurs
|
||||
*/
|
||||
public void ajoutHistorique(String IDdest , String IDsrc, String Msg) {
|
||||
public void ajoutHistorique(String iDdest , String iDsrc, String msg) {
|
||||
String petit;
|
||||
String grand;
|
||||
int comparaison = IDdest.compareTo(IDsrc);
|
||||
int comparaison = iDdest.compareTo(iDsrc);
|
||||
if (comparaison < 0) {
|
||||
petit = IDdest;
|
||||
grand = IDsrc ;
|
||||
petit = iDdest;
|
||||
grand = iDsrc ;
|
||||
}
|
||||
else {
|
||||
petit = IDsrc;
|
||||
grand = IDdest ;
|
||||
petit = iDsrc;
|
||||
grand = iDdest ;
|
||||
}
|
||||
String nomTable = "Chat_" + petit + "_" + grand ;
|
||||
String requete= "INSERT INTO `"+ nomTable +"`(`Destinataire`, `Source`, `Message`) VALUES ( ? , ? , ?)";
|
||||
PreparedStatement Ps = null ;
|
||||
PreparedStatement ps = null ;
|
||||
//Statement est utilisé pour envoyer une requete SQL à la base de donnee
|
||||
try {
|
||||
Ps = connection.prepareStatement(requete);
|
||||
Ps.setString(1, IDdest); // ? n°1 devient la valeur contenu dans IDdest
|
||||
Ps.setString(2, IDsrc); // ? n°2 devient la valeur contenu dans IDsrc
|
||||
Ps.setString(3, Msg); // ? n°3 devient la valeur contenu dans Msg
|
||||
ps = connection.prepareStatement(requete);
|
||||
ps.setString(1, iDdest); // ? n°1 devient la valeur contenu dans IDdest
|
||||
ps.setString(2, iDsrc); // ? n°2 devient la valeur contenu dans IDsrc
|
||||
ps.setString(3, msg); // ? n°3 devient la valeur contenu dans Msg
|
||||
//La date de l'envoi n'a pas besoin d'être renseigné, elle est automatique
|
||||
System.out.println("Statement cree");
|
||||
} catch (SQLException e) {
|
||||
|
@ -175,8 +184,8 @@ public class DataBase {
|
|||
}
|
||||
//Execute la donnée SQL statement passe en parametre
|
||||
try {
|
||||
assert Ps != null;
|
||||
Ps.executeUpdate();
|
||||
assert ps != null;
|
||||
ps.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
System.out.println(" Echec executeUpdate ");
|
||||
|
@ -186,23 +195,23 @@ public class DataBase {
|
|||
|
||||
/**
|
||||
* Méthode permettant d'ajouter un utilisateur dans la base de donnée si celui-ci n'existe pas déjà
|
||||
* @param ID Id de l'utilisateur que l'on veut rajouter
|
||||
* @param Pseudo Pseudo actuelle de l'utilisateur
|
||||
* @param iD Id de l'utilisateur que l'on veut rajouter
|
||||
* @param pseudo Pseudo actuelle de l'utilisateur
|
||||
*/
|
||||
public void ajoutUtilisateurs(String ID , String Pseudo ) {
|
||||
if(this.idExiste(ID)){
|
||||
this.majPseudo(ID, Pseudo);
|
||||
public void ajoutUtilisateurs(String iD , String pseudo ) {
|
||||
if(this.idExiste(iD)){
|
||||
this.majPseudo(iD, pseudo);
|
||||
}
|
||||
else {
|
||||
// L'utilisateur n'existe pas , on va le rajouter.
|
||||
System.out.println("On rajoute l'utilisateur " + Pseudo);
|
||||
System.out.println("On rajoute l'utilisateur " + pseudo);
|
||||
String requete = "INSERT INTO `Utilisateurs` (`ID`, `Pseudo`, `Actif`) VALUES ( ? , ? , '1')";
|
||||
PreparedStatement Ps = null;
|
||||
PreparedStatement ps = null;
|
||||
//Statement est utilisé pour envoyer une requete SQL à la base de donnee
|
||||
try {
|
||||
Ps = connection.prepareStatement(requete);
|
||||
Ps.setString(1, ID); // ? n°1 devient la valeur contenu dans ID
|
||||
Ps.setString(2, Pseudo); // ? n°2 devient la valeur contenu dans Pseudo
|
||||
ps = connection.prepareStatement(requete);
|
||||
ps.setString(1, iD); // ? n°1 devient la valeur contenu dans ID
|
||||
ps.setString(2, pseudo); // ? n°2 devient la valeur contenu dans Pseudo
|
||||
System.out.println("Statement cree");
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
|
@ -210,8 +219,8 @@ public class DataBase {
|
|||
}
|
||||
//Execute la donnée SQL statement passe en parametre
|
||||
try {
|
||||
assert Ps != null;
|
||||
Ps.executeUpdate();
|
||||
assert ps != null;
|
||||
ps.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
System.out.println(" Echec executeUpdate ");
|
||||
|
@ -250,23 +259,23 @@ public class DataBase {
|
|||
|
||||
/**
|
||||
* Méthode permettant de récupérer les N derniers messages envoyés entre 2 utilisateurs
|
||||
* @param ID Utilisateur associé a ChatApp
|
||||
* @param IDdestinataire Celui avec qui correspond ID
|
||||
* @param N Le nombre de messages souhaités
|
||||
* @param iD Utilisateur associé a ChatApp
|
||||
* @param iDdestinataire Celui avec qui correspond ID
|
||||
* @param n Le nombre de messages souhaités
|
||||
* @return Les N derniers Messages
|
||||
*/
|
||||
public String recupNMsg(String ID, String IDdestinataire, int N) {
|
||||
StringBuilder Msg = new StringBuilder();
|
||||
public String recupNMsg(String iD, String iDdestinataire, int n) {
|
||||
StringBuilder msg = new StringBuilder();
|
||||
String petit;
|
||||
String grand;
|
||||
int comparaison = ID.compareTo(IDdestinataire);
|
||||
int comparaison = iD.compareTo(iDdestinataire);
|
||||
if (comparaison < 0) {
|
||||
petit = ID;
|
||||
grand = IDdestinataire;
|
||||
petit = iD;
|
||||
grand = iDdestinataire;
|
||||
}
|
||||
else {
|
||||
petit = IDdestinataire;
|
||||
grand = ID ;
|
||||
petit = iDdestinataire;
|
||||
grand = iD ;
|
||||
}
|
||||
String nomTable = "Chat_" + petit + "_" + grand ;
|
||||
String requete = "SELECT * FROM `"+ nomTable +"`";
|
||||
|
@ -283,23 +292,23 @@ public class DataBase {
|
|||
} catch (SQLException throwables) {
|
||||
throwables.printStackTrace();
|
||||
}
|
||||
Integer Taille = tailleBDD(nomTable);
|
||||
if(Taille < N ){
|
||||
N = Taille ;
|
||||
Integer taille = tailleBDD(nomTable);
|
||||
if(taille < n ){
|
||||
n = taille ;
|
||||
}
|
||||
for(int i = 0 ; i < N; i++){
|
||||
for(int i = 0 ; i < n; i++){
|
||||
try {
|
||||
assert rs != null;
|
||||
if( rs.next()){
|
||||
String IDSource = rs.getString("Source");
|
||||
String Envoi = rs.getTimestamp("Envoi").toString();
|
||||
String Message = rs.getString("Message");
|
||||
if (IDSource.equals(ID)) Msg.append("Moi (").append(Envoi).append(") : ").append(Message);
|
||||
String iDSource = rs.getString("Source");
|
||||
String envoi = rs.getTimestamp("Envoi").toString();
|
||||
String message = rs.getString("Message");
|
||||
if (iDSource.equals(iD)) msg.append("Moi (").append(envoi).append(") : ").append(message);
|
||||
else {
|
||||
String PseudoSource = getPseudo(IDSource) ;
|
||||
Msg.append(PseudoSource).append(" (").append(Envoi).append(") : ").append(Message);
|
||||
String pseudoSource = getPseudo(iDSource) ;
|
||||
msg.append(pseudoSource).append(" (").append(envoi).append(") : ").append(message);
|
||||
}
|
||||
Msg.append('\n');
|
||||
msg.append('\n');
|
||||
}
|
||||
// MSG de la forme :
|
||||
// Source (Date) : Texte
|
||||
|
@ -307,7 +316,7 @@ public class DataBase {
|
|||
throwables.printStackTrace();
|
||||
}
|
||||
}
|
||||
return Msg.toString();
|
||||
return msg.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -316,7 +325,7 @@ public class DataBase {
|
|||
* @return Pseudo actuel
|
||||
*/
|
||||
private String getPseudo(String idSource) {
|
||||
String Pseudo = "" ;
|
||||
String pseudo = "" ;
|
||||
String requete= "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + idSource + "'";
|
||||
Statement stmt = null;
|
||||
ResultSet rs = null ;
|
||||
|
@ -334,34 +343,34 @@ public class DataBase {
|
|||
try {
|
||||
assert rs != null;
|
||||
if (rs.next()){
|
||||
Pseudo = rs.getString("Pseudo") ;
|
||||
pseudo = rs.getString("Pseudo") ;
|
||||
}
|
||||
} catch (SQLException throwables) {
|
||||
throwables.printStackTrace();
|
||||
}
|
||||
return Pseudo ;
|
||||
return pseudo ;
|
||||
}
|
||||
|
||||
/**
|
||||
* Méthode permettant de récupérer les messages d'une plage de donnée [deb,fin] envoyés entre 2 utilisateurs
|
||||
* @param ID Utilisateur associé a ChatApp
|
||||
* @param IDdestinataire Celui avec qui correspond ID
|
||||
* @param iD Utilisateur associé a ChatApp
|
||||
* @param iDdestinataire Celui avec qui correspond ID
|
||||
* @param deb On veut les messages à partir de l'indice deb
|
||||
* @param fin On veut les messages jusqu'a l'indice fin
|
||||
* @return Les messages d'une plage de donnée [deb,fin]
|
||||
*/
|
||||
public String recupMsg(String ID, String IDdestinataire, int deb , int fin) {
|
||||
StringBuilder Msg = new StringBuilder();
|
||||
public String recupMsg(String iD, String iDdestinataire, int deb , int fin) {
|
||||
StringBuilder msg = new StringBuilder();
|
||||
String petit;
|
||||
String grand;
|
||||
int comparaison = ID.compareTo(IDdestinataire);
|
||||
int comparaison = iD.compareTo(iDdestinataire);
|
||||
if (comparaison < 0) {
|
||||
petit = ID;
|
||||
grand = IDdestinataire;
|
||||
petit = iD;
|
||||
grand = iDdestinataire;
|
||||
}
|
||||
else {
|
||||
petit = IDdestinataire;
|
||||
grand = ID ;
|
||||
petit = iDdestinataire;
|
||||
grand = iD ;
|
||||
}
|
||||
String nomTable = "Chat_" + petit + "_" + grand ;
|
||||
String requete = "SELECT * FROM `"+ nomTable+"`";
|
||||
|
@ -378,25 +387,25 @@ public class DataBase {
|
|||
} catch (SQLException throwables) {
|
||||
throwables.printStackTrace();
|
||||
}
|
||||
Integer Taille = tailleBDD(nomTable);
|
||||
if(Taille < fin ){
|
||||
fin = Taille ;
|
||||
Integer taille = tailleBDD(nomTable);
|
||||
if(taille < fin ){
|
||||
fin = taille ;
|
||||
}
|
||||
for(int i = 0 ; i < fin; i++){
|
||||
try {
|
||||
assert rs != null;
|
||||
if( rs.next()){
|
||||
String IDSource = rs.getString("Source");
|
||||
String Envoi = rs.getTimestamp("Envoi").toString();
|
||||
String Message = rs.getString("Message");
|
||||
String iDSource = rs.getString("Source");
|
||||
String envoi = rs.getTimestamp("Envoi").toString();
|
||||
String message = rs.getString("Message");
|
||||
if (i >= deb) {
|
||||
if (IDSource.equals(ID)) {
|
||||
Msg.append("Moi (").append(Envoi).append(") : ").append(Message);
|
||||
if (iDSource.equals(iD)) {
|
||||
msg.append("Moi (").append(envoi).append(") : ").append(message);
|
||||
} else {
|
||||
String PseudoSource = getPseudo(IDSource);
|
||||
Msg.append(PseudoSource).append(" (").append(Envoi).append(") : ").append(Message);
|
||||
String PseudoSource = getPseudo(iDSource);
|
||||
msg.append(PseudoSource).append(" (").append(envoi).append(") : ").append(message);
|
||||
}
|
||||
Msg.append('\n');
|
||||
msg.append('\n');
|
||||
}
|
||||
}
|
||||
} catch (SQLException throwables) {
|
||||
|
@ -404,7 +413,7 @@ public class DataBase {
|
|||
}
|
||||
}
|
||||
|
||||
return Msg.toString();
|
||||
return msg.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -413,7 +422,7 @@ public class DataBase {
|
|||
* @return Taille de la BDD
|
||||
*/
|
||||
public Integer tailleBDD(String nomTable) {
|
||||
Integer Taille = 0 ;
|
||||
Integer taille = 0 ;
|
||||
String requete = "SELECT * FROM `"+nomTable+ "`";
|
||||
Statement stmt = null;
|
||||
ResultSet rs = null ;
|
||||
|
@ -435,20 +444,20 @@ public class DataBase {
|
|||
} catch (SQLException throwables) {
|
||||
throwables.printStackTrace();
|
||||
}
|
||||
Taille++; // on incremente Taille pour chaque solution trouvée
|
||||
taille++; // on incremente Taille pour chaque solution trouvée
|
||||
}
|
||||
return Taille;
|
||||
return taille;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode permettant de savoir si un utilisateur existe dans la base de donnée 'Utilisateurs'
|
||||
* @param ID On recherche l'utilisateur dont l'ID est ID
|
||||
* @param iD On recherche l'utilisateur dont l'ID est ID
|
||||
* @return True si l'utilisateur existe , False sinon
|
||||
*/
|
||||
public boolean idExiste(String ID){
|
||||
public boolean idExiste(String iD){
|
||||
boolean existe = false ;
|
||||
// Verification que l'utilisateur n'existe pas
|
||||
String requete = "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + ID +"'";
|
||||
String requete = "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + iD +"'";
|
||||
Statement stmt;
|
||||
ResultSet rs = null ;
|
||||
try {
|
||||
|
@ -469,22 +478,22 @@ public class DataBase {
|
|||
|
||||
/**
|
||||
* Méthode permettant de récupérer le nom de la table où sont stockés les messages de 2 utilisateurs.
|
||||
* @param U1 Un des 2 utilisateurs
|
||||
* @param U2 Le second utilisateur
|
||||
* @param u1 Un des 2 utilisateurs
|
||||
* @param u2 Le second utilisateur
|
||||
* @return Le nom de la table des historiques
|
||||
*/
|
||||
public String getNomTable(Utilisateur U1, Utilisateur U2){
|
||||
public String getNomTable(Utilisateur u1, Utilisateur u2){
|
||||
String petit;
|
||||
String grand;
|
||||
int comparaison;
|
||||
comparaison = U1.getId().compareTo(U2.getId());
|
||||
comparaison = u1.getId().compareTo(u2.getId());
|
||||
if (comparaison < 0) {
|
||||
petit = U1.getId();
|
||||
grand = U2.getId();
|
||||
petit = u1.getId();
|
||||
grand = u2.getId();
|
||||
}
|
||||
else {
|
||||
petit = U2.getId() ;
|
||||
grand = U1.getId() ;
|
||||
petit = u2.getId() ;
|
||||
grand = u1.getId() ;
|
||||
}
|
||||
return "Chat_" + petit + "_" + grand ;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package chatapp.Model;
|
||||
|
||||
import chatapp.Controller.ChatApp;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetAddress;
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
@ -13,7 +11,7 @@ import java.util.ArrayList;
|
|||
*/
|
||||
public class ListUtilisateurs {
|
||||
|
||||
// On conserve dans cette liste tout les utilisateurs actuellement actifs
|
||||
/* On conserve dans cette liste tout les utilisateurs actuellement actifs */
|
||||
private ArrayList<Utilisateur> actifUsers ;
|
||||
|
||||
/**
|
||||
|
@ -30,7 +28,6 @@ public class ListUtilisateurs {
|
|||
public synchronized void addList(Utilisateur u) {
|
||||
if (! this.appartient(u)){
|
||||
this.actifUsers.add(u);
|
||||
//ListeCommunicationPossible.add(u);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -53,7 +50,7 @@ public class ListUtilisateurs {
|
|||
* Récupérer un utilisateur à partir de son addresse IP
|
||||
* @param ip Adresse IP de l'utilisateur que l'on souhaite retrouver
|
||||
* @return L'utilisateur associé à l'adresse IP
|
||||
* @throws Exception
|
||||
* @throws Exception No such user with this IP address
|
||||
*/
|
||||
public Utilisateur getIPList(InetAddress ip) throws Exception {
|
||||
for(Utilisateur elem: this.actifUsers)
|
||||
|
@ -69,7 +66,7 @@ public class ListUtilisateurs {
|
|||
* Récupérer un utilisateur à partir de son ID
|
||||
* @param iD L'ID de l'utilisateur que l'on souhaite retrouver
|
||||
* @return L'utilisateur associé à l'adresse ID
|
||||
* @throws Exception
|
||||
* @throws Exception No such user with this ID
|
||||
*/
|
||||
public Utilisateur getIDList(String iD) throws Exception {
|
||||
for(Utilisateur elem: this.actifUsers)
|
||||
|
@ -128,8 +125,9 @@ public class ListUtilisateurs {
|
|||
boolean appartient = false ;
|
||||
for(Utilisateur elem: this.actifUsers)
|
||||
{
|
||||
if (elem.getId().equals(u.getId()) ) {
|
||||
appartient = true ;
|
||||
if (elem.getId().equals(u.getId())) {
|
||||
appartient = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
System.out.println("Test appartient : " + appartient);
|
||||
|
|
|
@ -16,10 +16,19 @@ import java.util.Date;
|
|||
* </p>
|
||||
*/
|
||||
public class MessageHorodate implements Serializable {
|
||||
/* Un message est toujours adressé à un destinataire */
|
||||
private Utilisateur destinataire ;
|
||||
|
||||
/* Un message est toujours associé à un utilisateur source */
|
||||
private Utilisateur source ;
|
||||
|
||||
/* La date d'horodatage du message */
|
||||
private Date dateHorodatage ;
|
||||
private int type; // 0 = debut de la communication, 1= message de communication, 2 = fin de la communicataion
|
||||
|
||||
/* Le type d'un messge : 0 = debut de la communication, 1= message de communication, 2 = fin de la communicataion */
|
||||
private int type;
|
||||
|
||||
/* Le corps du message */
|
||||
private String Message;
|
||||
|
||||
/**
|
||||
|
@ -27,14 +36,14 @@ public class MessageHorodate implements Serializable {
|
|||
* Constructeur , le message va etre horodaté
|
||||
* @param destinataire - Destinataire du message
|
||||
* @param source - Source du message
|
||||
* @param Message - Message envoyé
|
||||
* @param message - Message envoyé
|
||||
* @param type - Le type du message
|
||||
* </p>
|
||||
*/
|
||||
public MessageHorodate(Utilisateur destinataire, Utilisateur source, String Message, int type) {
|
||||
public MessageHorodate(Utilisateur destinataire, Utilisateur source, String message, int type) {
|
||||
this.setDestinataire(destinataire) ;
|
||||
this.setSource(source) ;
|
||||
this.setMessage(Message) ;
|
||||
this.setMessage(message) ;
|
||||
this.setDateHorodatage(new Date());
|
||||
this.type = type;
|
||||
}
|
||||
|
@ -56,13 +65,13 @@ public class MessageHorodate implements Serializable {
|
|||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
String Msg = "";
|
||||
Msg += ("Destinataire::" + this.getDestinataire() + "\n") ;
|
||||
Msg += ("Source::" + this.getSource()+ "\n") ;
|
||||
Msg += ("Type::"+ this.type+ "\n");
|
||||
Msg += ("Date::" + this.dateToString() + "\n") ;
|
||||
Msg += ("Message::" + this.getMessage() + "\n" );
|
||||
return Msg ;
|
||||
String msg = "";
|
||||
msg += ("Destinataire::" + this.getDestinataire() + "\n") ;
|
||||
msg += ("Source::" + this.getSource()+ "\n") ;
|
||||
msg += ("Type::"+ this.type+ "\n");
|
||||
msg += ("Date::" + this.dateToString() + "\n") ;
|
||||
msg += ("Message::" + this.getMessage() + "\n" );
|
||||
return msg ;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -16,14 +16,23 @@ import java.net.UnknownHostException;
|
|||
*/
|
||||
public class Utilisateur {
|
||||
|
||||
/* Un utilisateur possede un pseudo unique */
|
||||
private String pseudo ;
|
||||
|
||||
/* Un port (utilisé lors de nos premiers tests pour tester le broadcast) */
|
||||
private Integer port;
|
||||
|
||||
/* Un utilisateur est associé à une adresse IP */
|
||||
private final InetAddress ip ;
|
||||
|
||||
/* Chaque utilisateur possede un ID unique */
|
||||
private final String id ;
|
||||
|
||||
/* La taille maximum d'un ID */
|
||||
Integer TAILLE_MAX = 5;
|
||||
|
||||
/**
|
||||
* Constructeur : Utilisateur
|
||||
* Constructeur : Utilisateur (3 paramètres)
|
||||
* @param pseudo Le pseudo associé
|
||||
* @param port Le port
|
||||
* @param ip L'adresse IP
|
||||
|
@ -39,7 +48,7 @@ public class Utilisateur {
|
|||
}
|
||||
|
||||
/**
|
||||
* Constructeur : Utilisateur
|
||||
* Constructeur : Utilisateur (4 paramètres)
|
||||
* @param pseudo Le pseudo associé
|
||||
* @param port Le port
|
||||
* @param ip L'adresse IP
|
||||
|
|
|
@ -17,8 +17,13 @@ import java.util.HashMap;
|
|||
*/
|
||||
public class HttpEchange {
|
||||
|
||||
private String url = "http://192.168.1.72:8080/JavaEEHelloWorld_war_exploded/"; //Correspond à l'url de notre serveur de presence
|
||||
private static boolean connecte = false; // True si l'utilisateur peut se connecter avec ce nom d'utilisateur , False sinon
|
||||
/* URL de notre serveur de presence */
|
||||
private String url = "http://192.168.1.72:8080/JavaEEHelloWorld_war_exploded/";
|
||||
|
||||
/* True si l'utilisateur peut se connecter avec ce nom d'utilisateur , False sinon */
|
||||
private static boolean connecte = false;
|
||||
|
||||
/* Une instance de chatapp */
|
||||
private ChatApp chatapp;
|
||||
|
||||
/**
|
||||
|
@ -140,7 +145,6 @@ public class HttpEchange {
|
|||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Getter : Connecte
|
||||
* @return Le boolean connecté (True s'il peut se connecter avec ce nom d'utilisateur , False sinon)
|
||||
|
|
|
@ -15,10 +15,13 @@ import java.util.ArrayList;
|
|||
* </p>
|
||||
*/
|
||||
public class RunnerEcouteTCP extends Thread {
|
||||
/* Une instance de ChaAapp */
|
||||
public ChatApp app ;
|
||||
|
||||
private PropertyChangeSupport pcs;
|
||||
// on conserve les sessions actives dans un attribut liste
|
||||
private ArrayList<SessionClavardage> ListeSessions = new ArrayList<>();
|
||||
|
||||
/* on conserve les sessions actives dans un attribut liste */
|
||||
private ArrayList<SessionClavardage> listeSessions = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Constructeur
|
||||
|
@ -54,7 +57,7 @@ public class RunnerEcouteTCP extends Thread {
|
|||
System.out.println("Attente Session de clavardage");
|
||||
Socket link = ss.accept(); // Blocante
|
||||
SessionClavardage session = new SessionClavardage(link,app);
|
||||
this.ListeSessions.add(session);
|
||||
this.listeSessions.add(session);
|
||||
pcs.firePropertyChange("NouvelleSession",false,true);
|
||||
}
|
||||
}
|
||||
|
@ -68,7 +71,7 @@ public class RunnerEcouteTCP extends Thread {
|
|||
* @param session Session Active que l'on souhaite rajouter
|
||||
*/
|
||||
public void addSession(SessionClavardage session){
|
||||
this.ListeSessions.add(session);
|
||||
this.listeSessions.add(session);
|
||||
pcs.firePropertyChange("NouvelleSession",false,true);
|
||||
}
|
||||
|
||||
|
@ -77,7 +80,7 @@ public class RunnerEcouteTCP extends Thread {
|
|||
* @return Premiere Session Active
|
||||
*/
|
||||
public SessionClavardage getSessionClavardage() {
|
||||
return(this.ListeSessions.remove(0));
|
||||
return(this.listeSessions.remove(0));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -20,7 +20,7 @@ public class RunnerEcouteUDP extends Thread {
|
|||
|
||||
/**
|
||||
* Méthode qui vient ecraser la méthode run de la classe Thread.
|
||||
* La méthode 'ecouteUDP' est appelé.
|
||||
* <br> La méthode 'ecouteUDP' est appelé.
|
||||
*/
|
||||
@Override
|
||||
public void run() {
|
||||
|
|
|
@ -1,28 +1,26 @@
|
|||
package chatapp.Protocol;
|
||||
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.beans.PropertyChangeSupport;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.Socket;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import chatapp.Controller.ChatApp;
|
||||
import chatapp.Model.DataBase;
|
||||
import chatapp.Model.MessageHorodate;
|
||||
import chatapp.Model.Utilisateur;
|
||||
import chatapp.View.FenetreSession;
|
||||
import javafx.application.Platform;
|
||||
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.beans.PropertyChangeSupport;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.net.Socket;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Classe représentant une session de clavardage.
|
||||
* <br> La classe hérite de la classe Thread et dispose de 2 constructeurs selon que l'on initie une demande de session ou que l'on recoit une demande.
|
||||
* <br> Elle possède en attribut:
|
||||
* <br> - link: la socket associée à la session de clavardage
|
||||
* <br> - link : la socket associée à la session de clavardage
|
||||
* <br> - app : L'instance de chatapp
|
||||
* <br> - u2: l'utilisateur avec lequel on communique
|
||||
* <br> - out: le flux de donnees sortant
|
||||
* <br> - in: le flux de donnees entrant
|
||||
|
@ -31,14 +29,27 @@ import javafx.application.Platform;
|
|||
* </p>
|
||||
*/
|
||||
public class SessionClavardage extends Thread {
|
||||
|
||||
/* la socket associée à la session de clavardage */
|
||||
private Socket link;
|
||||
|
||||
/* L'instance de chatapp */
|
||||
private ChatApp app;
|
||||
|
||||
/* l'utilisateur avec lequel on communique */
|
||||
private Utilisateur u2;
|
||||
|
||||
/* le flux de donnees sortant */
|
||||
private ObjectOutputStream out;
|
||||
|
||||
/* le flux de donnees entrant */
|
||||
private ObjectInputStream in;
|
||||
|
||||
/* Le PropertyChangeSupport permettant d'envoyer les notifications de MessageRecu et de FindeSession */
|
||||
private PropertyChangeSupport pcs;
|
||||
private ArrayList<MessageHorodate> derniersMsg; // on met temporairement les derniers msgs pour éviter les pb de synchro inter-threads
|
||||
private int SessionID;
|
||||
|
||||
/* On met temporairement les derniers msgs pour éviter les pb de synchro inter-threads */
|
||||
private ArrayList<MessageHorodate> derniersMsg;
|
||||
|
||||
/**
|
||||
* <p> Ce constructeur crée une session de clavardage quand on recoit une requete</p>
|
||||
|
@ -54,8 +65,7 @@ public class SessionClavardage extends Thread {
|
|||
}catch(Exception e) {
|
||||
e.getStackTrace();
|
||||
}
|
||||
this.derniersMsg = new ArrayList<MessageHorodate>();
|
||||
this.SessionID = 2;
|
||||
this.derniersMsg = new ArrayList<>();
|
||||
this.pcs = new PropertyChangeSupport(this);
|
||||
this.start();
|
||||
}
|
||||
|
@ -77,7 +87,7 @@ public class SessionClavardage extends Thread {
|
|||
|
||||
e.printStackTrace();
|
||||
}
|
||||
this.derniersMsg = new ArrayList<MessageHorodate>();
|
||||
this.derniersMsg = new ArrayList<>();
|
||||
this.pcs = new PropertyChangeSupport(this);
|
||||
this.start();
|
||||
this.initierSession();
|
||||
|
@ -103,13 +113,13 @@ public class SessionClavardage extends Thread {
|
|||
try {
|
||||
getOut().writeObject(msgh.toString());
|
||||
} catch (IOException e) {
|
||||
//e.printStackTrace();
|
||||
e.printStackTrace();
|
||||
}
|
||||
finally {
|
||||
try {
|
||||
link.close();
|
||||
} catch (IOException e) {
|
||||
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -123,15 +133,16 @@ public class SessionClavardage extends Thread {
|
|||
isExterne="true"; // on indiquera dans le message si l'on est externe ou interne
|
||||
}
|
||||
System.out.println("Ajout d'un utilisateur dans communication");
|
||||
app.ListeCommunication.add(getU2().getId());
|
||||
System.out.println(app.ListeCommunication.size());
|
||||
app.listeCommunication.add(getU2().getId());
|
||||
System.out.println(app.listeCommunication.size());
|
||||
MessageHorodate msgh = new MessageHorodate(getU2(),getApp().getMe(),isExterne,3);
|
||||
try {
|
||||
getOut().writeObject(msgh.toString());
|
||||
} catch (IOException e) {
|
||||
//e.printStackTrace();
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode transformant prenant un string pour le transmettre sous la forme d'un message horodate a l'utilisateur distant
|
||||
* @param msg Le texte du message à envoyer
|
||||
|
@ -161,10 +172,10 @@ public class SessionClavardage extends Thread {
|
|||
* <p> Methode lancee par le thread, permet de receptionner les messages horodates recus et d'agir en conséquence selon le type de message recu</p>
|
||||
*/
|
||||
public void run() {
|
||||
String plaintext = null;
|
||||
String plaintext;
|
||||
MessageHorodate msg = null;
|
||||
System.out.println("Session demarre");
|
||||
//app.getDb().CreationTableHistorique(app.getMe().getId(), u2.getId());
|
||||
//app.getDb().creationTableHistorique(app.getMe().getId(), u2.getId());
|
||||
while(true) {
|
||||
try {
|
||||
plaintext = (String) getIn().readObject();
|
||||
|
@ -175,7 +186,7 @@ public class SessionClavardage extends Thread {
|
|||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
pcs.firePropertyChange("FinDeLaSession", false, true);
|
||||
app.ListeCommunication.remove(u2.getId());
|
||||
app.listeCommunication.remove(u2.getId());
|
||||
break;
|
||||
}
|
||||
if(msg.getType() == 2) {
|
||||
|
@ -185,13 +196,13 @@ public class SessionClavardage extends Thread {
|
|||
} catch (IOException e) {
|
||||
break;
|
||||
}
|
||||
app.ListeCommunication.remove(u2.getId());
|
||||
app.listeCommunication.remove(u2.getId());
|
||||
break;
|
||||
}
|
||||
else if(msg.getType() == 3) {
|
||||
System.out.println("Session Initiee");
|
||||
this.u2 = msg.getSource() ;
|
||||
app.ListeCommunication.add(u2.getId());
|
||||
app.listeCommunication.add(u2.getId());
|
||||
Platform.runLater( () ->
|
||||
new FenetreSession(this)
|
||||
);
|
||||
|
@ -199,7 +210,6 @@ public class SessionClavardage extends Thread {
|
|||
else{
|
||||
derniersMsg.add(msg);
|
||||
pcs.firePropertyChange("MessageRecu",false,true);}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -275,12 +285,4 @@ public class SessionClavardage extends Thread {
|
|||
this.u2 = u2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter : SessionID
|
||||
* @return SessionID
|
||||
*/
|
||||
public int getSessionID() {
|
||||
return SessionID;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,10 +24,8 @@ import chatapp.Model.*;
|
|||
*/
|
||||
public class UDPEchange {
|
||||
|
||||
/* True si l'utilisateur peut se connecter avec ce nom d'utilisateur , False sinon */
|
||||
private static Boolean Connecte = true;
|
||||
// True si l'utilisateur peut se connecter avec ce nom d'utilisateur , False sinon
|
||||
|
||||
private static Boolean EcouteEnCours = false;
|
||||
|
||||
/**
|
||||
* Getter : Connecte
|
||||
|
@ -64,7 +62,6 @@ public class UDPEchange {
|
|||
PseudoValide = value ;
|
||||
}
|
||||
|
||||
|
||||
/**<p>
|
||||
* Getter : Ip
|
||||
* <br>Permet de recuperer l'adresse de l'hote sur le reseau au format IPv4.
|
||||
|
@ -94,6 +91,7 @@ public class UDPEchange {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Méthode permettant d'envoyer un message à tout les utilisateurs à l'aide du protocole UDP
|
||||
|
@ -101,9 +99,9 @@ public class UDPEchange {
|
|||
* @param broadcastMessage Message à transmettre aux utilisateurs
|
||||
* @throws IOException
|
||||
*/
|
||||
public static void EnvoiBroadcast(String broadcastMessage) throws IOException {
|
||||
public static void envoiBroadcast(String broadcastMessage) throws IOException {
|
||||
int port = 1234 ;
|
||||
// Envoie en broadcast à tous les utilsateurs
|
||||
// Envoie en broadcast à tous les utilisateurs
|
||||
for (InetAddress broadcastAddr : listAllBroadcastAddresses()) {
|
||||
DatagramSocket socket = new DatagramSocket();
|
||||
socket.setBroadcast(true);
|
||||
|
@ -127,8 +125,7 @@ public class UDPEchange {
|
|||
* </p>
|
||||
* @param app L'application de chat de l'utilisateur qui receptionne le message
|
||||
*/
|
||||
public static void ecouteUDP(ChatApp app)
|
||||
{
|
||||
public static void ecouteUDP(ChatApp app) {
|
||||
DatagramSocket socket = null;
|
||||
ExecutorService exec = Executors.newFixedThreadPool(1000);
|
||||
try {
|
||||
|
@ -157,22 +154,22 @@ public class UDPEchange {
|
|||
* Méthode permettant d'envoyer un message a utilisateur en particulier
|
||||
* a l'aide du protocole UDP
|
||||
* </p>
|
||||
* @param Adress L'adresse IP de l'utilisateur
|
||||
* @param Message Message message à transmettre a l'utilisateur
|
||||
* @param address L'adresse IP de l'utilisateur
|
||||
* @param message Message message à transmettre a l'utilisateur
|
||||
* @throws IOException
|
||||
*/
|
||||
public static void envoiUnicast( InetAddress Adress , String Message ) throws IOException {
|
||||
public static void envoiUnicast( InetAddress address , String message ) throws IOException {
|
||||
if (ChatApp.getInstance().isConnecte()){
|
||||
DatagramSocket socket = new DatagramSocket();
|
||||
byte[]buffer = Message.getBytes();
|
||||
DatagramPacket packet = new DatagramPacket( buffer, buffer.length, Adress, 1234 );
|
||||
byte[]buffer = message.getBytes();
|
||||
DatagramPacket packet = new DatagramPacket( buffer, buffer.length, address, 1234 );
|
||||
socket.send(packet);
|
||||
socket.close();
|
||||
System.out.println("***********Message envoye***********");
|
||||
System.out.println("Dest Ip: " + Adress.toString());
|
||||
System.out.println("Dest Ip: " + address.toString());
|
||||
System.out.println("Dest port: " + String.valueOf(1234));
|
||||
System.out.println("Contenu: ");
|
||||
System.out.println(Message);
|
||||
System.out.println(message);
|
||||
System.out.println("************************************");
|
||||
}
|
||||
}
|
||||
|
@ -215,6 +212,11 @@ class RunnerUDP implements Runnable {
|
|||
final DatagramPacket data ;
|
||||
ChatApp app ;
|
||||
|
||||
/**
|
||||
* Constructeur RunnerUDP
|
||||
* @param data Un datagramPacket
|
||||
* @param app Instance de chatapp
|
||||
*/
|
||||
public RunnerUDP(DatagramPacket data, ChatApp app) {
|
||||
this.data= data;
|
||||
this.app = app ;
|
||||
|
@ -310,19 +312,19 @@ class RunnerUDP implements Runnable {
|
|||
//*******************************************************************************************************************
|
||||
|
||||
if (Type.equals("Demande Modification Pseudo")) {
|
||||
Utilisateur Source = Utilisateur.stringToUtilisateur(received.split("\n")[1]);
|
||||
if (! Source.equals(this.app.getMe())) { // On envoit en broadcast mais on ne souhaite pas recevoir de message de nous même
|
||||
Utilisateur source = Utilisateur.stringToUtilisateur(received.split("\n")[1]);
|
||||
if (! source.equals(this.app.getMe())) { // On envoit en broadcast mais on ne souhaite pas recevoir de message de nous même
|
||||
String nouveau = received.split("\n")[2] ;
|
||||
String Message = "";
|
||||
String message = "";
|
||||
if(( app.getActifUsers() ).verifierUnicite(nouveau)) {
|
||||
Message = "Bon Choix Pseudo\n" + nouveau ;
|
||||
message = "Bon Choix Pseudo\n" + nouveau ;
|
||||
}
|
||||
else {
|
||||
Message = "Mauvais Choix Pseudo\n" ;
|
||||
message = "Mauvais Choix Pseudo\n" ;
|
||||
}
|
||||
System.out.println(Message);
|
||||
System.out.println(message);
|
||||
try {
|
||||
UDPEchange.envoiUnicast(Source.getIp(),Message);
|
||||
UDPEchange.envoiUnicast(source.getIp(),message);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
@ -335,18 +337,18 @@ class RunnerUDP implements Runnable {
|
|||
//************************************************************************************************************
|
||||
|
||||
if (Type.equals("Modification pseudo reussi")) {
|
||||
Utilisateur Source = Utilisateur.stringToUtilisateur(received.split("\n")[1]);
|
||||
if (! Source.equals(this.app.getMe())) { // On envoit en broadcast mais on ne souhaite pas recevoir de message de nous même
|
||||
Utilisateur source = Utilisateur.stringToUtilisateur(received.split("\n")[1]);
|
||||
if (! source.equals(this.app.getMe())) { // On envoit en broadcast mais on ne souhaite pas recevoir de message de nous même
|
||||
String nouveau = received.split("\n")[2] ;
|
||||
System.out.println("Je rentre ici");
|
||||
if(app.getActifUsers().appartient(Source)) { // On verifie d'abord que Source appartient bien a la liste des utilisateurs actifs
|
||||
System.out.println(Source.getPseudo() + " va etre changer en : " + nouveau);
|
||||
app.getActifUsers().modifierList(Source.getPseudo(), nouveau);
|
||||
if(app.getActifUsers().appartient(source)) { // On verifie d'abord que Source appartient bien a la liste des utilisateurs actifs
|
||||
System.out.println(source.getPseudo() + " va etre changer en : " + nouveau);
|
||||
app.getActifUsers().modifierList(source.getPseudo(), nouveau);
|
||||
} else {
|
||||
System.out.println(Source.getPseudo() + " va etre ajouter en : " + nouveau);
|
||||
System.out.println(source.getPseudo() + " va etre ajouter en : " + nouveau);
|
||||
// Suite a une perte d'un message lors d'une connexion l'utilisateur Source n'apparait pas dans la liste
|
||||
Source.setPseudo(nouveau);
|
||||
app.getActifUsers().addList(Source);
|
||||
source.setPseudo(nouveau);
|
||||
app.getActifUsers().addList(source);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -390,8 +392,4 @@ class RunnerUDP implements Runnable {
|
|||
app.getActifUsers().addList(nouveau);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -41,12 +41,8 @@ public class ChangementPseudo {
|
|||
@FXML // fx:id="MenuButton"
|
||||
private Button MenuButton; // Value injected by FXMLLoader
|
||||
|
||||
/* Une instance de chatApp */
|
||||
private ChatApp chatApp;
|
||||
@FXML
|
||||
void nouveauPseudo(ActionEvent event) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@FXML
|
||||
/**
|
||||
|
@ -100,6 +96,5 @@ public class ChangementPseudo {
|
|||
chatApp = ChatApp.getInstance();
|
||||
pseudonyme1.setText(chatApp.getMe().getPseudo());
|
||||
this.validationButton.setDefaultButton(true);
|
||||
//System.out.println(this.validationButton.isDefaultButton());
|
||||
}
|
||||
}
|
|
@ -9,7 +9,6 @@ import java.text.SimpleDateFormat;
|
|||
import java.util.Date;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import chatapp.Controller.ChatApp;
|
||||
import chatapp.Model.MessageHorodate;
|
||||
import chatapp.Model.Utilisateur;
|
||||
import chatapp.Protocol.SessionClavardage;
|
||||
|
@ -52,9 +51,15 @@ public class Clavardage implements Initializable, PropertyChangeListener {
|
|||
|
||||
@FXML // fx:id="MenuButton"
|
||||
|
||||
/* L'utilisateur destinataire */
|
||||
private Utilisateur u2;
|
||||
|
||||
/* Une session de clavardage */
|
||||
private SessionClavardage session;
|
||||
|
||||
/* Le nom de la table dans la BDD stockant l'historique des messages */
|
||||
private String nomTable;
|
||||
|
||||
@FXML
|
||||
/**
|
||||
* <p>Handler gerant l'envoi du message contenu dans le TextField AEnvoyer et sur pression du bouton EnvoyerButton</p>
|
||||
|
|
|
@ -24,10 +24,16 @@ import javafx.stage.Stage;
|
|||
*/
|
||||
public class ConnexionScreen {
|
||||
|
||||
/* Bouton de connexion */
|
||||
public Button connexionButton;
|
||||
|
||||
/* Zone de texte où inserer le pseudonyme souhaité */
|
||||
public TextField pseudonyme;
|
||||
|
||||
/* RadioButton : l'utilisateur est distant */
|
||||
public RadioButton remoteButton;
|
||||
|
||||
/* RadioButton : l'utilisateur est local */
|
||||
public RadioButton localButton;
|
||||
|
||||
@FXML // ResourceBundle that was given to the FXMLLoader
|
||||
|
@ -38,8 +44,7 @@ public class ConnexionScreen {
|
|||
|
||||
@FXML // This method is called by the FXMLLoader when initialization is complete
|
||||
void initialize() {
|
||||
connexionButton.setDefaultButton(true);
|
||||
|
||||
connexionButton.setDefaultButton(true); // Appuyer sur entrée equivaut a cliquer sur le bouton de connexion
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -39,6 +39,8 @@ public class DemarrerSession {
|
|||
|
||||
@FXML // fx:id="MenuButton"
|
||||
private Button MenuButton; // Value injected by FXMLLoader
|
||||
|
||||
/* Instance de chatApp */
|
||||
private ChatApp chatApp;
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,22 +1,18 @@
|
|||
package chatapp.View;
|
||||
|
||||
import chatapp.Protocol.SessionClavardage;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.scene.Parent;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.stage.WindowEvent;
|
||||
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.io.IOException;
|
||||
/**
|
||||
* <p>
|
||||
* Classe permettant d'ouvrir une nouvelle fenetre afin de clavarder avec un utilisateur.
|
||||
* </p>
|
||||
*/
|
||||
public class FenetreSession extends Stage {
|
||||
SessionClavardage session;
|
||||
|
||||
/**
|
||||
* <p> Permet l'ouverture de la fenetre associee a la session de clavardage</p>
|
||||
* @param session Un objet FenetreSession est attribué avec un objet de type SessionClavardage
|
||||
|
@ -26,24 +22,16 @@ public class FenetreSession extends Stage {
|
|||
try{
|
||||
Parent rootchat = fichier.load();
|
||||
Clavardage controller = fichier.getController();
|
||||
System.out.println("Session id "+session.getSessionID());
|
||||
//controller.printsalut();
|
||||
controller.setSession(session);
|
||||
Scene scene1 = null;
|
||||
Scene scene1;
|
||||
scene1 = new Scene(rootchat,600,400);
|
||||
this.setScene(scene1);
|
||||
this.setTitle("Session avec "+session.getU2().getPseudo());
|
||||
this.setMinWidth(600);
|
||||
this.setMinHeight(400);
|
||||
//this.setMaxWidth(600);
|
||||
//this.setMaxHeight(400);
|
||||
this.show();
|
||||
this.centerOnScreen();
|
||||
this.setOnCloseRequest(new EventHandler<WindowEvent>() {
|
||||
public void handle(WindowEvent we) {
|
||||
session.arretSession();
|
||||
}
|
||||
});
|
||||
this.setOnCloseRequest(we -> session.arretSession());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
package chatapp.View;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import chatapp.Controller.ChatApp;
|
||||
import javafx.application.Platform;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.fxml.FXMLLoader;
|
||||
|
@ -15,6 +10,11 @@ import javafx.scene.Scene;
|
|||
import javafx.scene.control.MenuItem;
|
||||
import javafx.scene.text.Text;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Classe representant la page d'accueil. Elle est composé d'un menu en haut a gauche.
|
||||
|
@ -23,13 +23,24 @@ import javafx.stage.Stage;
|
|||
*/
|
||||
public class View_Menu {
|
||||
|
||||
/* Le pseudo de l'utilisateur */
|
||||
public Text pseudonyme;
|
||||
|
||||
/* Choix dans la bar de menu : Connaitre les utilisateurs actifs */
|
||||
public MenuItem utilsActifsButton;
|
||||
|
||||
/* Choix dans la bar de menu : Demarrer une session de clavardage */
|
||||
public MenuItem demarrerSessionButton;
|
||||
|
||||
/* Choix dans la bar de menu : Changer de pseudo */
|
||||
public MenuItem changerPseudoButton;
|
||||
|
||||
@FXML // ResourceBundle that was given to the FXMLLoader
|
||||
private ResourceBundle resources;
|
||||
|
||||
/* Une instance de chatApp */
|
||||
private ChatApp chatapp;
|
||||
|
||||
@FXML // URL location of the FXML file that was given to the FXMLLoader
|
||||
private URL location;
|
||||
|
||||
|
@ -97,9 +108,6 @@ public class View_Menu {
|
|||
public void deconnexion(ActionEvent actionEvent) {
|
||||
try {
|
||||
chatapp.deconnexion();
|
||||
/*chatapp.getMain().stop();
|
||||
Platform.exit();
|
||||
System.exit(0);*/
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (Exception e) {
|
||||
|
|
|
@ -22,8 +22,12 @@ import javafx.stage.Stage;
|
|||
*/
|
||||
public class View_Utilisateurs {
|
||||
|
||||
/* La zone d'affichage des utilisateurs actifs */
|
||||
public TextArea ListeUtilisateurs;
|
||||
|
||||
/* Bouton de retour au menu */
|
||||
public Button MenuButton;
|
||||
|
||||
@FXML // ResourceBundle that was given to the FXMLLoader
|
||||
private ResourceBundle resources;
|
||||
|
||||
|
@ -38,8 +42,6 @@ public class View_Utilisateurs {
|
|||
ListeUtilisateurs.appendText( " - " +elem.getPseudo() + '\n');
|
||||
}
|
||||
ListeUtilisateurs.setEditable(false);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Yükleniyor…
Yeni konuda referans