Mise en place des methodes pour l'implementation de la deuxieme partie

This commit is contained in:
Nabzzz 2021-01-16 12:59:02 +01:00
parent 3545112960
commit f0de008617
4 changed files with 163 additions and 122 deletions

View file

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
@ -24,24 +26,34 @@
</Text>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="304.0" prefWidth="600.0" style="-fx-background-color: #3299a8;">
<HBox alignment="CENTER" prefHeight="304.0" prefWidth="598.0" style="-fx-background-color: #3299a8;">
<children>
<GridPane alignment="CENTER" prefHeight="302.0" prefWidth="279.0">
<GridPane alignment="CENTER" prefHeight="275.0" prefWidth="448.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="254.19998168945312" minHeight="10.0" prefHeight="123.19998779296876" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="107.20001220703125" vgrow="SOMETIMES" />
<RowConstraints maxHeight="254.19998168945312" minHeight="10.0" prefHeight="111.80001831054688" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="69.39998168945314" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="33.60002441406249" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="27.400000000000034" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="79.39999999999998" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TextField fx:id="pseudonyme" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="2" />
<Button fx:id="connexionButton" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#connexion" prefHeight="38.0" prefWidth="287.0" style="-fx-background-color: #b0c926;" text="Connexion" textFill="#3299a8" GridPane.columnSpan="2" GridPane.rowIndex="1">
<TextField fx:id="pseudonyme" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="3" />
<Button fx:id="connexionButton" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#connexion" prefHeight="38.0" prefWidth="453.0" style="-fx-background-color: #b0c926;" text="Connexion" textFill="#3299a8" GridPane.columnSpan="3" GridPane.rowIndex="1">
<font>
<Font name="OCR A Extended" size="27.0" />
</font>
</Button>
<RadioButton fx:id="remoteButton" mnemonicParsing="false" selected="true" text="Connexion distante" GridPane.columnIndex="1" GridPane.rowIndex="3">
<toggleGroup>
<ToggleGroup fx:id="lieu" />
</toggleGroup>
</RadioButton>
<RadioButton fx:id="localButton" mnemonicParsing="false" text="Connexion locale" toggleGroup="$lieu" GridPane.columnIndex="1" GridPane.rowIndex="2" />
</children>
</GridPane>
</children>

View file

@ -1,39 +1,39 @@
chatapp/Launcher.java
chatapp.Launcher
chatapp/View/Clavardage.java
chatapp.View.Clavardage
chatapp.View.Clavardage$1
chatapp/View/DemarrerSession.java
chatapp.View.DemarrerSession
chatapp/Protocol/RunnerEcouteUDP.java
chatapp.Protocol.RunnerEcouteUDP
chatapp/Model/Utilisateur.java
chatapp.Model.Utilisateur
chatapp/View/View_Utilisateurs.java
chatapp.View.View_Utilisateurs
chatapp/View/ChangementPseudo.java
chatapp.View.ChangementPseudo
chatapp/Model/MessageHorodate.java
chatapp.Model.MessageHorodate
chatapp/Model/ListUtilisateurs.java
chatapp.Model.ListUtilisateurs
chatapp/View/View_Menu.java
chatapp.View.View_Menu
chatapp/Protocol/RunnerEcouteTCP.java
chatapp.Protocol.RunnerEcouteTCP
chatapp/Protocol/UDPEchange.java
chatapp.Protocol.RunnerUDP
chatapp.Protocol.UDPEchange
chatapp/Controller/ChatApp.java
chatapp.Controller.ChatApp
chatapp/Main.java
chatapp.Main
chatapp/Model/DataBase.java
chatapp.Model.DataBase
chatapp/Protocol/SessionClavardage.java
chatapp.Protocol.SessionClavardage
chatapp/Protocol/RunnerEcouteTCP.java
chatapp.Protocol.RunnerEcouteTCP
chatapp/View/FenetreSession.java
chatapp.View.FenetreSession
chatapp.View.FenetreSession$1
chatapp/Controller/ChatApp.java
chatapp.Controller.ChatApp
chatapp/View/ChangementPseudo.java
chatapp.View.ChangementPseudo
chatapp/Protocol/RunnerEcouteUDP.java
chatapp.Protocol.RunnerEcouteUDP
chatapp/Model/ListUtilisateurs.java
chatapp.Model.ListUtilisateurs
chatapp/Protocol/UDPEchange.java
chatapp.Protocol.RunnerUDP
chatapp.Protocol.UDPEchange
chatapp/Main.java
chatapp.Main
chatapp/View/Clavardage.java
chatapp.View.Clavardage
chatapp.View.Clavardage$1
chatapp/Protocol/SessionClavardage.java
chatapp.Protocol.SessionClavardage
chatapp/View/ConnexionScreen.java
chatapp.View.ConnexionScreen
chatapp/View/View_Utilisateurs.java
chatapp.View.View_Utilisateurs
chatapp/View/View_Menu.java
chatapp.View.View_Menu
chatapp/View/DemarrerSession.java
chatapp.View.DemarrerSession

View file

@ -31,6 +31,7 @@ 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
/* ChatApp est associe a un utilisateur */
private Utilisateur me;
@ -88,22 +89,40 @@ public class ChatApp implements PropertyChangeListener {
}
/*public void majHistorique2(MessageHorodate mh, String pseudo) {
Historique h = getMapHistorique().get(pseudo);
//h.addMessage(mh);
getMapHistorique().put(h.getUser2().getPseudo(),h);
}*/
/**
* <p>Methode appelee pour modifier le pseudo et fait appel a la fonction adequate selon que l'on est en interne ou en externe</p>
* @param nouveau nouveau pseudo avec lequel on souhaite se renommer
* @return TRUE si la modification du pseudo a reussi, FALSE sinon
* @throws IOException
*/
public boolean modifierPseudo(String nouveau) throws IOException{
if(this.isExterne()){
return this.modifierPseudoExterne(nouveau);
}
else{
return modifierPseudoInterne(nouveau);
}
}
/**
* <p>Modification du pseudo de l'utilisateur
* <p>Modification du pseudo de l'utilisateur en EXTERNE
* Envoie ses informations utilisateurs et son nouveau pseudo au serveur de presence</p>
*
* @param nouveau correspond au nouveau pseudo
* @return False si modiferPseudo a echoue, True sinon
*/
private boolean modifierPseudoExterne(String nouveau) {
return false;
}
/**
* <p>Modification du pseudo de l'utilisateur en INTERNE
* Envoie en broadcast ses informations utilisateurs et son nouveau pseudo</p>
*
* @param nouveau correspond au nouveau pseudo
* @return False si modiferPseudo a echoue, True sinon
*/
public Boolean modifierPseudo(String nouveau) throws IOException {
public Boolean modifierPseudoInterne(String nouveau) throws IOException {
// Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Demande Modification Pseudo\n" + this.getMe().toString() + "\n" + nouveau + "\n";
UDPEchange.EnvoiBroadcast(broadcastMessage);
@ -135,41 +154,41 @@ public class ChatApp implements PropertyChangeListener {
}
}
/**
* <p>Methode appelee lors de la connexion d'un nouvel utilisateur.
* Il va prevenir les utilisateurs du reseau de son arrivee.</p>
* @return False si Connexion a echoue, True sinon
* <p>Methode permettant d'appeler la fonction de connexion adequate selon que l'on est en externe ou en interne</p>
* @param pseudo Le pseudo avec lequel l'on souhaite se connecter
* @return True si la connexion a ete autorisee, false sinon
* @throws IOException
*/
public Boolean connexion() throws IOException {
// Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Connexion\n" + this.getMe().toString() ;
UDPEchange.EnvoiBroadcast(broadcastMessage);
try {
Thread.sleep(2000); // L'utilisateur doit attendre la reponse de tous les utilisateurs connectes
} catch (InterruptedException e) {
e.printStackTrace();
public boolean connexion(String pseudo) throws IOException{
if(this.isExterne()){
return this.connexionExterne(pseudo);
}
if (UDPEchange.getConnecte()) {
System.out.println("Connexion reussie");
return true;
}
else
{
System.out.println("Connexion echoue");
UDPEchange.setConnecte(true);
return false ;
else{
return connexionInterne(pseudo);
}
}
/**
* <p>Methode appelee lors de la connexion de l'utilisateur, va prevenir les autres
* <p>Methode appelee lors de la connexion de l'utilisateur en EXTERNE, va prevenir le
* serveur de presence de l'arrivee de l'utilisateur </p>
* @param pseudo le pseudonyme avec lequel l'utilisateur souhaite se connecter
* @return False si Connexion a echoue, True sinon
* @throws IOException
*/
private boolean connexionExterne(String pseudo) {
return false;
}
/**
* <p>Methode appelee lors de la connexion de l'utilisateur en INTERNE, va prevenir les autres
* utlisateurs du reseau de l'arrivee de l'utilisateur sur celui-ci</p>
* @param pseudo le pseudonyme avec lequel l'utilisateur souhaite se connecter
* @return False si Connexion a echoue, True sinon
* @throws IOException
*/
public Boolean connexion(String pseudo) throws IOException {
public Boolean connexionInterne(String pseudo) throws IOException {
// Message que l'on envoie à tous les utilisateurs actifs
this.me.setPseudo(pseudo);
String broadcastMessage = "Connexion\n" + this.getMe().toString() ;
@ -220,12 +239,37 @@ public class ChatApp implements PropertyChangeListener {
this.runnerEcouteUDP = new RunnerEcouteUDP(this);
this.runnerEcouteUDP.start();
}
/**
* <p>Methode appelee lors de la deconnexion de l'utilisateur.
* La methode va appeler la fonction adequate selon que l'on est en interne ou en externe</p>
*
*/
public void deconnexion() throws IOException{
if(this.isExterne()){
this.deconnexionExterne();
}
else{
deconnexionInterne();
}
}
/**
* <p>Methode appelee lors de la deconnexion en EXTERNE de l'utilisateur.
* Il va prevenir le serveur de presence de son depart.</p>
*
*/
private void deconnexionExterne() {
// A IMPLEMENTER
}
/**
* <p>Methode appelee lors de la deconnexion en INTERNE de l'utilisateur.
* Il va prevenir les utilisateurs du reseau de son depart.</p>
*
*/
public void deconnexion() throws IOException {
public void deconnexionInterne() throws IOException {
// Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Deconnexion\n" + this.getMe().toString() ;
UDPEchange.EnvoiBroadcast(broadcastMessage);
@ -257,39 +301,6 @@ public class ChatApp implements PropertyChangeListener {
}
/*public static void main (String[] args) throws IOException {
ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1]),this.app) ;
System.out.println("On lance le chatapp");
ExecutorService execUDP = Executors.newFixedThreadPool(1000);
execUDP.submit(new RunnerEcouteUDP(app));
try {
app.connexion();
} catch (IOException e) {
e.printStackTrace();
}
ExecutorService execTCP = Executors.newFixedThreadPool(1000);
System.out.println("On lance l'écoute TCP de chatapp");
execTCP.submit(new RunnerEcouteTCP(app));
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(app.getMe().getPseudo().equals("Marvel")) {
app.getHist("Doudou").afficher10derniers();
System.out.println("Tentative de connexion avec Doudou");
TCPEchange.demarrerSession(app, app.actifUsers.getPseudoList("Doudou"));
}
}*/
/**
* <p>Handler des differents evenements que chatapp ecoute</p>
* @param evt l'evenement qui a ete indique par le pcs
@ -317,4 +328,20 @@ public class ChatApp implements PropertyChangeListener {
* @return la base de donnee associee
*/
public DataBase getDb(){return this.db;}
/**
* <p> Getter permettant de savoir si on est en externe ou en interne</p>
* @return TRUE si Externe FALSE sinon
*/
public boolean isExterne() {
return isExterne;
}
/**
* <p>Setter Permet de définir si on est un utilisateur externe ou non</p>
* @param externe TRUE si Externe FALSE sinon
*/
public void setExterne(boolean externe) {
isExterne = externe;
}
}

View file

@ -51,33 +51,35 @@ public class ConnexionScreen {
Boolean connexion = false;
if(this.localButton.isSelected()) {
// PARTIE CONNEXION LOCALE
try {
connexion = ChatApp.getInstance().connexion(pseudonyme.getText());
} catch (IOException e) {
e.printStackTrace();
}
if (!connexion) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Connexion");
// Header Text: null
alert.setHeaderText(null);
alert.setContentText("Echec de Connexion: le pseudo " + pseudonyme.getText() + " est deja pris");
alert.showAndWait();
} else {
Stage stage = (Stage) connexionButton.getScene().getWindow();
Parent root = null;
try {
root = FXMLLoader.load(getClass().getResource("/fenetres/View_Menu.fxml"));
} catch (IOException e) {
e.printStackTrace();
}
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
ChatApp.getInstance().setExterne(false);
}
else{
// PARTIE CONNEXION DISTANTE
ChatApp.getInstance().setExterne(true);
}
try {
connexion = ChatApp.getInstance().connexion(pseudonyme.getText());
} catch (IOException e) {
e.printStackTrace();
}
if (!connexion) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Connexion");
// Header Text: null
alert.setHeaderText(null);
alert.setContentText("Echec de Connexion: le pseudo " + pseudonyme.getText() + " est deja pris");
alert.showAndWait();
} else {
Stage stage = (Stage) connexionButton.getScene().getWindow();
Parent root = null;
try {
root = FXMLLoader.load(getClass().getResource("/fenetres/View_Menu.fxml"));
} catch (IOException e) {
e.printStackTrace();
}
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
}
}