Ajout de commentaire

This commit is contained in:
Auriane Lartigue 2021-01-03 16:12:12 +04:00
父節點 4e188d0258
當前提交 8490d5caad
共有 11 個文件被更改,包括 170 次插入37 次删除

查看文件

@ -1,19 +1,31 @@
package chatapp.Controller;
import chatapp.Model.*;
import chatapp.Protocol.*;
import chatapp.Model.DataBase;
import chatapp.Model.ListUtilisateurs;
import chatapp.Model.Utilisateur;
import chatapp.Protocol.RunnerEcouteTCP;
import chatapp.Protocol.RunnerEcouteUDP;
import chatapp.Protocol.SessionClavardage;
import chatapp.Protocol.UDPEchange;
import javafx.application.Application;
import javafx.application.Platform;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.IOException;
import java.net.InetAddress;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* <p> Controller de l'application. C'est par cette méthode que chaque connexion et chaque session sont entamees
* Les differents attributs sont:
* actifsUsers: qui est la liste des utilisateurs actifs actuellement et connus par l'application
* me: qui est l'instance de la classe Utilisateur représentant l'utilisateur se connectant via cette instance de chatapp
* main: l'application de l'interface graphique qui s'occupe d'instancier chatapp
* runnerEcouteTCP: instance de runnerEcouteTCP, Thread permettant de recevoir des demandes de clavardage
* runnerEcouteUDP: instance de runnerEcouteUDP; Thread permettant de communiquer en UDP pour recevoir les demandes de connexion, deconnexion, changements de pseudo et leurs réponses associées
* connecte: booleen indiquant si l'on est connecte sur le reseau ou non
* db: instance permettant de se connecter à la base de donnees centralisee
* </p>
*/
public class ChatApp implements PropertyChangeListener {
/* Liste des utilisateurs actifs */
@ -44,8 +56,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 = null ;
ip = UDPEchange.getCurrentIp();
InetAddress ip = UDPEchange.getCurrentIp();
this.me = new Utilisateur(pseudo,port,ip);
this.actifUsers.addList(getMe());

查看文件

@ -2,15 +2,28 @@ package chatapp.Protocol;
import chatapp.Controller.ChatApp;
/**
* <p>
* Classe permettant de gérer les multiples connexions en UDP.
* Extend la classe Thread.
* </p>
*/
public class RunnerEcouteUDP extends Thread {
ChatApp app ;
/**
* Constructeur
* @param app Un RunnerEcouteUDP est toujours associé a une application de Chat
*/
public RunnerEcouteUDP(ChatApp app) {
this.app = app ;
}
/**
* Methode qui vient ecraser la méthode run de la classe Thread.
* La méthode 'ecouteUDP' est appele.
*/
@Override
public void run() {
UDPEchange.ecouteUDP(app);
}
}

查看文件

@ -17,6 +17,19 @@ import chatapp.Model.Utilisateur;
import chatapp.View.FenetreSession;
import javafx.application.Platform;
/**
* <p>
* Classe représentant une session de clavrdage.
* 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.
* Elle possède en attribut:
* link: la socket associée à la session de clavardage
* u2: l'utilisateur avec lequel on communique
* out: le flux de donnees sortant
* in: le flux de donnees entrant
* pcs: Le PropertyChangeSupport permettant d'envoyer les notifications de MessageRecu et de FindeSession
* derniersMsg: la liste temporaire des derniers messages recus
* </p>
*/
public class SessionClavardage extends Thread {
private Socket link;
private ChatApp app;
@ -26,6 +39,12 @@ public class SessionClavardage extends Thread {
private PropertyChangeSupport pcs;
private ArrayList<MessageHorodate> derniersMsg; // on met temporairement les derniers msgs pour éviter les pb de synchro inter-threads
private int SessionID;
/**
* <p> Ce constructeur crée une session de clavardage quand on recoit une requete</p>
* @param link la socket associee a la requete TCP que l'on a recu
* @param app l'instance de chatapp
*/
public SessionClavardage(Socket link, ChatApp app) {
this.setLink(link);
this.setApp(app);
@ -45,6 +64,11 @@ public class SessionClavardage extends Thread {
this.start();
}
/**
* <p> Le constructeur associe a l'envoi d'une requete TCP, lorsque que l'on veut initier une session de clavardage avec un utilisateur connecte</p>
* @param u2 l'utilisateur avec qui l'on souhaite démarrer une session de clavardage
* @param app l'instance de chataap associee
*/
public SessionClavardage(Utilisateur u2, ChatApp app) {
this.setU2(u2);
this.setApp(app);
@ -65,12 +89,18 @@ public class SessionClavardage extends Thread {
);
}
/**
* Permet aux PropertyChangeListener de s'abonner aux notifications des evenements
* @param pcl le PropertyListener qui souhaite s'abonner sur ce PropertyChangeSupport
*/
public void addPropertyChangeListener(PropertyChangeListener pcl){
this.pcs.addPropertyChangeListener("MessageRecu",pcl);
this.pcs.addPropertyChangeListener("FinDeLaSession",pcl);
}
/**
* <p> Methode permettant d'arreter cette session de clavardage et de prevenir l'autre utilisateur de la fin de la session</p>
*/
public void arretSession() {
MessageHorodate msgh = new MessageHorodate(getU2(),getApp().getMe(),".",2);
try {
@ -86,6 +116,11 @@ public class SessionClavardage extends Thread {
}
}
}
/**
* 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 a envoyer
*/
public void envoiMsg(String msg) {
MessageHorodate msgh = new MessageHorodate(getU2(),getApp().getMe(),msg,1);
try {
@ -97,12 +132,19 @@ public class SessionClavardage extends Thread {
}
/**
* <p> Methode permettant de recuperer le dernier message recu qui a ete mis dans la liste des messages recus.
* Utilisee par l'interface graphique qui a ete avertie grace au PropertyChangeSupport</p>
* @return le dernier message horodate recu
*/
public MessageHorodate getDernierMsg() {
return this.derniersMsg.remove(0);
}
/**
* <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;
MessageHorodate msg = null;
@ -134,52 +176,84 @@ public class SessionClavardage extends Thread {
}
}
/**
* Getter
* @return le flux d'ecriture des messages sortant
*/
public ObjectOutputStream getOut() {
return out;
}
/**
* Setter
* @param out le flux d'ecriture des messages sortant
*/
public void setOut(ObjectOutputStream out) {
this.out = out;
}
/**
* Getter
* @return le flux de lecture des messages entrant
*/
public ObjectInputStream getIn() {
return in;
}
/**
* Setter
* @param in le flux de lecture des messages entrant
*/
public void setIn(ObjectInputStream in) {
this.in = in;
}
public Socket getLink() {
return link;
}
/**
* Setter
* @param link la Socket asscciee a la connexion TCP et donc a la session
*/
public void setLink(Socket link) {
this.link = link;
}
/**
* Getter
* @return l'instance de chatApp
*/
public ChatApp getApp() {
return app;
}
/**
* Setter
* @param app l'instance de chatApp
*/
public void setApp(ChatApp app) {
this.app = app;
}
/**
* Getter
* @return l'utilisateur avec lequel on communique
*/
public Utilisateur getU2() {
return u2;
}
/**
* Setter
* @param u2 l'utilisateur avec lequel on communique
*/
public void setU2(Utilisateur u2) {
this.u2 = u2;
}
/**
* Getter
* @return SessionID
*/
public int getSessionID() {
return SessionID;
}
public void setSessionID(int sessionID) {
SessionID = sessionID;
}
}

查看文件

@ -22,7 +22,6 @@ import chatapp.Model.*;
* Classe representant les echanges UDP entre utilisateurs.
* </p>
*/
public class UDPEchange {
private static Boolean Connecte = true;

查看文件

@ -16,7 +16,11 @@ package chatapp.View;
import javafx.scene.control.TextField;
import javafx.scene.text.Text;
import javafx.stage.Stage;
/**
* <p>
* Classe representant l'interface graphique permettant de changer de pseudo
* </p>
*/
public class ChangementPseudo {
@FXML // ResourceBundle that was given to the FXMLLoader
@ -47,6 +51,7 @@ public class ChangementPseudo {
@FXML
/**
* <p> Handler permettant de retourner au menu principal sur pression du MenuButton</p>
* @param event L'utilisateur vient d'appuyer sur le bouton Retour au menu
*/
void retourMenu(ActionEvent event) {
System.out.println("Retour au menu principal");
@ -65,6 +70,7 @@ public class ChangementPseudo {
@FXML
/**
* <p> Handler permettant de lancer la verrification de l'unicite du ppseudo sur pression du validtionButton</p>
* @param event L'utilisateur vient d'appuyer sur le bouton Valider pseudo
*/
void validerPseudo(ActionEvent event) {
boolean pseudoOK = false;

查看文件

@ -23,6 +23,11 @@ import javafx.scene.control.TextField;
import javafx.scene.text.Text;
import javafx.stage.Stage;
/**
* <p>
* Classe representant l'interface graphique permettant de clavarder avec un utilisateur.
* </p>
*/
public class Clavardage implements Initializable, PropertyChangeListener {
@FXML //fx:id="plusButton"
public Button plusButton;
@ -53,6 +58,7 @@ public class Clavardage implements Initializable, PropertyChangeListener {
@FXML
/**
* <p>Handler gerant l'envoi du message contenu dans le TextField AEnvoyer et sur pression du bouton EnvoyerButton</p>
* @param event L'utilisateur vient d'appuyer sur le bouton Envoyer
*/
void envoyerMessage(ActionEvent event) {
String msg = AEnvoyer.getText();
@ -73,9 +79,7 @@ public class Clavardage implements Initializable, PropertyChangeListener {
* @param session la session a associer a la classe
*/
public void setSession(SessionClavardage session) {
this.session = session;
this.session.addPropertyChangeListener(this);
this.u2=session.getU2();
this.pseudonyme1.setText(u2.getPseudo());
@ -128,7 +132,7 @@ public class Clavardage implements Initializable, PropertyChangeListener {
/**
* <p> Permet de recepurer plus de messages stoces dans la database en appuyant sur le bouton plusButton</p>
* @param actionEvent
* @param actionEvent L'utilisateur a appuye sur le bouton plus pour obtenir tout l'utilisateur
*/
public void ajouterMessagesHistorique(ActionEvent actionEvent) {
this.nomTable = this.session.getApp().getDb().getNomTable(u2,this.session.getApp().getMe());

查看文件

@ -16,7 +16,12 @@ import javafx.scene.control.Button;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
/**
* <p>
* Classe representant l'interface graphique permettant de se connecter.
* L'utilisateur rentre un pseudo et choisit une connexion distante ou locale.
* </p>
*/
public class ConnexionScreen {
public Button connexionButton;
@ -40,11 +45,12 @@ public class ConnexionScreen {
/**
* <p>Handler permettant de lancer la connexion avec le pseudonyme contenu dans le TextField pseudonyme en appuyant sur le connexionButton
* </p>
* @param actionEvent
* @param actionEvent L'utilisateur vient d'appuyer sur le bouton connexion
*/
public void connexion(ActionEvent actionEvent) {
Boolean connexion = false;
if(this.localButton.isSelected()) {
// PARTIE CONNEXION LOCALE
try {
connexion = ChatApp.getInstance().connexion(pseudonyme.getText());
} catch (IOException e) {

查看文件

@ -20,7 +20,11 @@ import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.stage.Stage;
/**
* <p>
* Classe representant l'interface graphique permettant de choisir un utilisateur avec qui clavarder.
* </p>
*/
public class DemarrerSession {
@FXML // ResourceBundle that was given to the FXMLLoader
@ -38,7 +42,7 @@ public class DemarrerSession {
/**
* <p> Handler permettant de demarrer une session de clavardage avec le contact choisi dans la comboBox choixContaact</p>
* @param event
* @param event L'utilisateur vient de selectionner un utilisateur
*/
@FXML
void demarrerSessionAvec(ActionEvent event) {
@ -47,6 +51,7 @@ public class DemarrerSession {
/**
* <p> Handler permettant de retourner au menu principal sur pression du MenuButton</p>
* @param event L'utilisateur vient d'appuyer sur le bouton Retour au menu
*/
@FXML
void retourMenu(ActionEvent event) {

查看文件

@ -10,11 +10,16 @@ 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
*/
public FenetreSession(SessionClavardage session) {
FXMLLoader fichier = new FXMLLoader(getClass().getResource("/fenetres/View_Clavardage.fxml"));

查看文件

@ -15,7 +15,12 @@ import javafx.scene.Scene;
import javafx.scene.control.MenuItem;
import javafx.scene.text.Text;
import javafx.stage.Stage;
/**
* <p>
* Classe representant la page d'acceuil. Elle est composé d'un menu en haut a gauche.
* Au centre un petit message "Bienvenue" suivi du pseudo de l'utilisateur est affiché.
* </p>
*/
public class View_Menu {
public Text pseudonyme;
@ -36,7 +41,7 @@ public class View_Menu {
/**
* <p>Handler permettant d'aller a la scene View_Utilisateurs pour afficher la liste des utilisateurs actifs</p>
* @param actionEvent
* @param actionEvent L'utilisateur a choisit l'option afficher utilisateurs actifs dans le menu
*/
public void afficherUtilsActifs(ActionEvent actionEvent) {
Stage stage = (Stage) pseudonyme.getScene().getWindow();
@ -53,7 +58,7 @@ public class View_Menu {
/**
* <p>Handler permettant d'aller a la scene Demarrer_Session pour choisir un utilisateur avec qui clavarder
* @param actionEvent
* @param actionEvent L'utilisateur a choisit l'option de demarrer une session de clavardage dans le menu
*/
public void demarrerSession(ActionEvent actionEvent) {
Stage stage = (Stage) pseudonyme.getScene().getWindow();
@ -70,7 +75,7 @@ public class View_Menu {
/**
* <p>Handler permettant d'aller a la scene View_ChangementPseudo pour changer son pseudonyme
* @param actionEvent
* @param actionEvent L'utilisateur a choisit l'option changer de pseudo
*/
public void changerPseudo(ActionEvent actionEvent) {
Stage stage = (Stage) pseudonyme.getScene().getWindow();
@ -87,7 +92,7 @@ public class View_Menu {
/**
* <p>Handler permettant de se deconnecter et fermer l'application
* @param actionEvent
* @param actionEvent L'utilisateur a choisit l'option Deconnexion dans le menu
*/
public void deconnexion(ActionEvent actionEvent) {
try {

查看文件

@ -15,7 +15,11 @@ import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.stage.Stage;
/**
* <p>
* Classe representant l'interface graphique permettant d'afficher les utilisateurs actifs
* </p>
*/
public class View_Utilisateurs {
public TextArea ListeUtilisateurs;
@ -41,6 +45,7 @@ public class View_Utilisateurs {
/**
* <p> Handler permettant de retourner au menu principal sur pression du MenuButton</p>
* @param actionEvent L'utilisateur vient d'appuyer sur le bouton Retour au menu
*/
public void retourMenu(ActionEvent actionEvent) {
Stage stage = (Stage) MenuButton.getScene().getWindow();