From 8490d5caade8ab371db77ddd9b131204aa9ce6e5 Mon Sep 17 00:00:00 2001 From: alartigu Date: Sun, 3 Jan 2021 16:12:12 +0400 Subject: [PATCH] Ajout de commentaire --- .../main/java/chatapp/Controller/ChatApp.java | 29 ++++-- .../chatapp/Protocol/RunnerEcouteUDP.java | 17 +++- .../chatapp/Protocol/SessionClavardage.java | 94 +++++++++++++++++-- .../java/chatapp/Protocol/UDPEchange.java | 1 - .../java/chatapp/View/ChangementPseudo.java | 8 +- .../main/java/chatapp/View/Clavardage.java | 10 +- .../java/chatapp/View/ConnexionScreen.java | 10 +- .../java/chatapp/View/DemarrerSession.java | 9 +- .../java/chatapp/View/FenetreSession.java | 7 +- .../src/main/java/chatapp/View/View_Menu.java | 15 ++- .../java/chatapp/View/View_Utilisateurs.java | 7 +- 11 files changed, 170 insertions(+), 37 deletions(-) diff --git a/Implementation/chatapp/src/main/java/chatapp/Controller/ChatApp.java b/Implementation/chatapp/src/main/java/chatapp/Controller/ChatApp.java index 2014c2a..34921db 100644 --- a/Implementation/chatapp/src/main/java/chatapp/Controller/ChatApp.java +++ b/Implementation/chatapp/src/main/java/chatapp/Controller/ChatApp.java @@ -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; +/** + *

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 + *

+ */ 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()); diff --git a/Implementation/chatapp/src/main/java/chatapp/Protocol/RunnerEcouteUDP.java b/Implementation/chatapp/src/main/java/chatapp/Protocol/RunnerEcouteUDP.java index 06f2d9a..e83c4e2 100644 --- a/Implementation/chatapp/src/main/java/chatapp/Protocol/RunnerEcouteUDP.java +++ b/Implementation/chatapp/src/main/java/chatapp/Protocol/RunnerEcouteUDP.java @@ -2,15 +2,28 @@ package chatapp.Protocol; import chatapp.Controller.ChatApp; +/** + *

+ * Classe permettant de gérer les multiples connexions en UDP. + * Extend la classe Thread. + *

+ */ 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); - } } \ No newline at end of file diff --git a/Implementation/chatapp/src/main/java/chatapp/Protocol/SessionClavardage.java b/Implementation/chatapp/src/main/java/chatapp/Protocol/SessionClavardage.java index 0ea34fa..85fb499 100644 --- a/Implementation/chatapp/src/main/java/chatapp/Protocol/SessionClavardage.java +++ b/Implementation/chatapp/src/main/java/chatapp/Protocol/SessionClavardage.java @@ -17,6 +17,19 @@ import chatapp.Model.Utilisateur; import chatapp.View.FenetreSession; import javafx.application.Platform; +/** + *

+ * 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 + *

+ */ 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 derniersMsg; // on met temporairement les derniers msgs pour éviter les pb de synchro inter-threads private int SessionID; + + /** + *

Ce constructeur crée une session de clavardage quand on recoit une requete

+ * @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(); } + /** + *

Le constructeur associe a l'envoi d'une requete TCP, lorsque que l'on veut initier une session de clavardage avec un utilisateur connecte

+ * @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); } + /** + *

Methode permettant d'arreter cette session de clavardage et de prevenir l'autre utilisateur de la fin de la session

+ */ 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 { } + /** + *

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

+ * @return le dernier message horodate recu + */ public MessageHorodate getDernierMsg() { return this.derniersMsg.remove(0); } - + /** + *

Methode lancee par le thread, permet de receptionner les messages horodates recus et d'agir en conséquence selon le type de message recu

+ */ 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; - } } diff --git a/Implementation/chatapp/src/main/java/chatapp/Protocol/UDPEchange.java b/Implementation/chatapp/src/main/java/chatapp/Protocol/UDPEchange.java index fadfbf5..dc5c1a3 100644 --- a/Implementation/chatapp/src/main/java/chatapp/Protocol/UDPEchange.java +++ b/Implementation/chatapp/src/main/java/chatapp/Protocol/UDPEchange.java @@ -22,7 +22,6 @@ import chatapp.Model.*; * Classe representant les echanges UDP entre utilisateurs. *

*/ - public class UDPEchange { private static Boolean Connecte = true; diff --git a/Implementation/chatapp/src/main/java/chatapp/View/ChangementPseudo.java b/Implementation/chatapp/src/main/java/chatapp/View/ChangementPseudo.java index b5f82b9..6dc5ae0 100644 --- a/Implementation/chatapp/src/main/java/chatapp/View/ChangementPseudo.java +++ b/Implementation/chatapp/src/main/java/chatapp/View/ChangementPseudo.java @@ -16,7 +16,11 @@ package chatapp.View; import javafx.scene.control.TextField; import javafx.scene.text.Text; import javafx.stage.Stage; - +/** + *

+ * Classe representant l'interface graphique permettant de changer de pseudo + *

+ */ public class ChangementPseudo { @FXML // ResourceBundle that was given to the FXMLLoader @@ -47,6 +51,7 @@ public class ChangementPseudo { @FXML /** *

Handler permettant de retourner au menu principal sur pression du MenuButton

+ * @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 /** *

Handler permettant de lancer la verrification de l'unicite du ppseudo sur pression du validtionButton

+ * @param event L'utilisateur vient d'appuyer sur le bouton Valider pseudo */ void validerPseudo(ActionEvent event) { boolean pseudoOK = false; diff --git a/Implementation/chatapp/src/main/java/chatapp/View/Clavardage.java b/Implementation/chatapp/src/main/java/chatapp/View/Clavardage.java index 565c958..47ebd3c 100644 --- a/Implementation/chatapp/src/main/java/chatapp/View/Clavardage.java +++ b/Implementation/chatapp/src/main/java/chatapp/View/Clavardage.java @@ -23,6 +23,11 @@ import javafx.scene.control.TextField; import javafx.scene.text.Text; import javafx.stage.Stage; +/** + *

+ * Classe representant l'interface graphique permettant de clavarder avec un utilisateur. + *

+ */ public class Clavardage implements Initializable, PropertyChangeListener { @FXML //fx:id="plusButton" public Button plusButton; @@ -53,6 +58,7 @@ public class Clavardage implements Initializable, PropertyChangeListener { @FXML /** *

Handler gerant l'envoi du message contenu dans le TextField AEnvoyer et sur pression du bouton EnvoyerButton

+ * @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 { /** *

Permet de recepurer plus de messages stoces dans la database en appuyant sur le bouton plusButton

- * @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()); diff --git a/Implementation/chatapp/src/main/java/chatapp/View/ConnexionScreen.java b/Implementation/chatapp/src/main/java/chatapp/View/ConnexionScreen.java index 9997cc5..13f6bc1 100644 --- a/Implementation/chatapp/src/main/java/chatapp/View/ConnexionScreen.java +++ b/Implementation/chatapp/src/main/java/chatapp/View/ConnexionScreen.java @@ -16,7 +16,12 @@ import javafx.scene.control.Button; import javafx.scene.control.RadioButton; import javafx.scene.control.TextField; import javafx.stage.Stage; - +/** + *

+ * Classe representant l'interface graphique permettant de se connecter. + * L'utilisateur rentre un pseudo et choisit une connexion distante ou locale. + *

+ */ public class ConnexionScreen { public Button connexionButton; @@ -40,11 +45,12 @@ public class ConnexionScreen { /** *

Handler permettant de lancer la connexion avec le pseudonyme contenu dans le TextField pseudonyme en appuyant sur le connexionButton *

- * @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) { diff --git a/Implementation/chatapp/src/main/java/chatapp/View/DemarrerSession.java b/Implementation/chatapp/src/main/java/chatapp/View/DemarrerSession.java index 4d987f4..5b8a6a9 100644 --- a/Implementation/chatapp/src/main/java/chatapp/View/DemarrerSession.java +++ b/Implementation/chatapp/src/main/java/chatapp/View/DemarrerSession.java @@ -20,7 +20,11 @@ import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.stage.Stage; - +/** + *

+ * Classe representant l'interface graphique permettant de choisir un utilisateur avec qui clavarder. + *

+ */ public class DemarrerSession { @FXML // ResourceBundle that was given to the FXMLLoader @@ -38,7 +42,7 @@ public class DemarrerSession { /** *

Handler permettant de demarrer une session de clavardage avec le contact choisi dans la comboBox choixContaact

- * @param event + * @param event L'utilisateur vient de selectionner un utilisateur */ @FXML void demarrerSessionAvec(ActionEvent event) { @@ -47,6 +51,7 @@ public class DemarrerSession { /** *

Handler permettant de retourner au menu principal sur pression du MenuButton

+ * @param event L'utilisateur vient d'appuyer sur le bouton Retour au menu */ @FXML void retourMenu(ActionEvent event) { diff --git a/Implementation/chatapp/src/main/java/chatapp/View/FenetreSession.java b/Implementation/chatapp/src/main/java/chatapp/View/FenetreSession.java index 4ca243d..cc43ca1 100644 --- a/Implementation/chatapp/src/main/java/chatapp/View/FenetreSession.java +++ b/Implementation/chatapp/src/main/java/chatapp/View/FenetreSession.java @@ -10,11 +10,16 @@ import javafx.stage.WindowEvent; import java.beans.PropertyChangeListener; import java.io.IOException; - +/** + *

+ * Classe permettant d'ouvrir une nouvelle fenetre afin de clavarder avec un utilisateur. + *

+ */ public class FenetreSession extends Stage { SessionClavardage session; /** *

Permet l'ouverture de la fenetre associee a la session de clavardage

+ * @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")); diff --git a/Implementation/chatapp/src/main/java/chatapp/View/View_Menu.java b/Implementation/chatapp/src/main/java/chatapp/View/View_Menu.java index 8c78146..090aeb2 100644 --- a/Implementation/chatapp/src/main/java/chatapp/View/View_Menu.java +++ b/Implementation/chatapp/src/main/java/chatapp/View/View_Menu.java @@ -15,7 +15,12 @@ import javafx.scene.Scene; import javafx.scene.control.MenuItem; import javafx.scene.text.Text; import javafx.stage.Stage; - +/** + *

+ * 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é. + *

+ */ public class View_Menu { public Text pseudonyme; @@ -36,7 +41,7 @@ public class View_Menu { /** *

Handler permettant d'aller a la scene View_Utilisateurs pour afficher la liste des utilisateurs actifs

- * @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 { /** *

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 { /** *

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 { /** *

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 { diff --git a/Implementation/chatapp/src/main/java/chatapp/View/View_Utilisateurs.java b/Implementation/chatapp/src/main/java/chatapp/View/View_Utilisateurs.java index 96fcb3e..0eeb3c2 100644 --- a/Implementation/chatapp/src/main/java/chatapp/View/View_Utilisateurs.java +++ b/Implementation/chatapp/src/main/java/chatapp/View/View_Utilisateurs.java @@ -15,7 +15,11 @@ import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextArea; import javafx.stage.Stage; - +/** + *

+ * Classe representant l'interface graphique permettant d'afficher les utilisateurs actifs + *

+ */ public class View_Utilisateurs { public TextArea ListeUtilisateurs; @@ -41,6 +45,7 @@ public class View_Utilisateurs { /** *

Handler permettant de retourner au menu principal sur pression du MenuButton

+ * @param actionEvent L'utilisateur vient d'appuyer sur le bouton Retour au menu */ public void retourMenu(ActionEvent actionEvent) { Stage stage = (Stage) MenuButton.getScene().getWindow();