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
förälder 3545112960
incheckning f0de008617
4 ändrade filer med 163 tillägg och 122 borttagningar

Visa fil

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?> <?import javafx.scene.control.Button?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextField?> <?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?> <?import javafx.scene.layout.GridPane?>
@ -24,24 +26,34 @@
</Text> </Text>
</children> </children>
</HBox> </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> <children>
<GridPane alignment="CENTER" prefHeight="302.0" prefWidth="279.0"> <GridPane alignment="CENTER" prefHeight="275.0" prefWidth="448.0">
<columnConstraints> <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 hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="254.19998168945312" minHeight="10.0" prefHeight="123.19998779296876" vgrow="SOMETIMES" /> <RowConstraints maxHeight="254.19998168945312" minHeight="10.0" prefHeight="111.80001831054688" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="107.20001220703125" 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> </rowConstraints>
<children> <children>
<TextField fx:id="pseudonyme" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="2" /> <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="287.0" style="-fx-background-color: #b0c926;" text="Connexion" textFill="#3299a8" GridPane.columnSpan="2" GridPane.rowIndex="1"> <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>
<Font name="OCR A Extended" size="27.0" /> <Font name="OCR A Extended" size="27.0" />
</font> </font>
</Button> </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> </children>
</GridPane> </GridPane>
</children> </children>

Visa fil

@ -1,39 +1,39 @@
chatapp/Launcher.java chatapp/Launcher.java
chatapp.Launcher 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.java
chatapp.Model.Utilisateur 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.java
chatapp.Model.MessageHorodate 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.java
chatapp.Model.DataBase chatapp.Model.DataBase
chatapp/Protocol/SessionClavardage.java chatapp/Protocol/RunnerEcouteTCP.java
chatapp.Protocol.SessionClavardage chatapp.Protocol.RunnerEcouteTCP
chatapp/View/FenetreSession.java chatapp/View/FenetreSession.java
chatapp.View.FenetreSession chatapp.View.FenetreSession
chatapp.View.FenetreSession$1 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.java
chatapp.View.ConnexionScreen 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

Visa fil

@ -31,6 +31,7 @@ public class ChatApp implements PropertyChangeListener {
/* Liste des utilisateurs actifs */ /* Liste des utilisateurs actifs */
private ListUtilisateurs actifUsers ; 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 */ /* ChatApp est associe a un utilisateur */
private Utilisateur me; private Utilisateur me;
@ -88,22 +89,40 @@ public class ChatApp implements PropertyChangeListener {
} }
/**
/*public void majHistorique2(MessageHorodate mh, String pseudo) { * <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>
Historique h = getMapHistorique().get(pseudo); * @param nouveau nouveau pseudo avec lequel on souhaite se renommer
//h.addMessage(mh); * @return TRUE si la modification du pseudo a reussi, FALSE sinon
getMapHistorique().put(h.getUser2().getPseudo(),h); * @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> * Envoie en broadcast ses informations utilisateurs et son nouveau pseudo</p>
* *
* @param nouveau correspond au nouveau pseudo * @param nouveau correspond au nouveau pseudo
* @return False si modiferPseudo a echoue, True sinon * @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 // Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Demande Modification Pseudo\n" + this.getMe().toString() + "\n" + nouveau + "\n"; String broadcastMessage = "Demande Modification Pseudo\n" + this.getMe().toString() + "\n" + nouveau + "\n";
UDPEchange.EnvoiBroadcast(broadcastMessage); UDPEchange.EnvoiBroadcast(broadcastMessage);
@ -135,41 +154,41 @@ public class ChatApp implements PropertyChangeListener {
} }
} }
/** /**
* <p>Methode appelee lors de la connexion d'un nouvel utilisateur. * <p>Methode permettant d'appeler la fonction de connexion adequate selon que l'on est en externe ou en interne</p>
* Il va prevenir les utilisateurs du reseau de son arrivee.</p> * @param pseudo Le pseudo avec lequel l'on souhaite se connecter
* @return False si Connexion a echoue, True sinon * @return True si la connexion a ete autorisee, false sinon
* @throws IOException
*/ */
public Boolean connexion() throws IOException { public boolean connexion(String pseudo) throws IOException{
// Message que l'on envoie à tous les utilisateurs actifs if(this.isExterne()){
String broadcastMessage = "Connexion\n" + this.getMe().toString() ; return this.connexionExterne(pseudo);
UDPEchange.EnvoiBroadcast(broadcastMessage);
try {
Thread.sleep(2000); // L'utilisateur doit attendre la reponse de tous les utilisateurs connectes
} catch (InterruptedException e) {
e.printStackTrace();
} }
if (UDPEchange.getConnecte()) { else{
System.out.println("Connexion reussie"); return connexionInterne(pseudo);
return true;
}
else
{
System.out.println("Connexion echoue");
UDPEchange.setConnecte(true);
return false ;
} }
} }
/** /**
* <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> * utlisateurs du reseau de l'arrivee de l'utilisateur sur celui-ci</p>
* @param pseudo le pseudonyme avec lequel l'utilisateur souhaite se connecter * @param pseudo le pseudonyme avec lequel l'utilisateur souhaite se connecter
* @return False si Connexion a echoue, True sinon * @return False si Connexion a echoue, True sinon
* @throws IOException * @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 // Message que l'on envoie à tous les utilisateurs actifs
this.me.setPseudo(pseudo); this.me.setPseudo(pseudo);
String broadcastMessage = "Connexion\n" + this.getMe().toString() ; String broadcastMessage = "Connexion\n" + this.getMe().toString() ;
@ -220,12 +239,37 @@ public class ChatApp implements PropertyChangeListener {
this.runnerEcouteUDP = new RunnerEcouteUDP(this); this.runnerEcouteUDP = new RunnerEcouteUDP(this);
this.runnerEcouteUDP.start(); this.runnerEcouteUDP.start();
} }
/** /**
* <p>Methode appelee lors de la deconnexion de l'utilisateur. * <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> * 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 // Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Deconnexion\n" + this.getMe().toString() ; String broadcastMessage = "Deconnexion\n" + this.getMe().toString() ;
UDPEchange.EnvoiBroadcast(broadcastMessage); 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> * <p>Handler des differents evenements que chatapp ecoute</p>
* @param evt l'evenement qui a ete indique par le pcs * @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 * @return la base de donnee associee
*/ */
public DataBase getDb(){return this.db;} 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;
}
} }

Visa fil

@ -51,33 +51,35 @@ public class ConnexionScreen {
Boolean connexion = false; Boolean connexion = false;
if(this.localButton.isSelected()) { if(this.localButton.isSelected()) {
// PARTIE CONNEXION LOCALE // PARTIE CONNEXION LOCALE
try { ChatApp.getInstance().setExterne(false);
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();
}
} }
else{ else{
// PARTIE CONNEXION DISTANTE // 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();
} }
} }
} }