Debogage GUI

This commit is contained in:
Nabzzz 2020-12-21 11:29:19 +01:00
parent f9fa379fc3
commit 508a1b89e8
28 changed files with 106 additions and 470 deletions

View file

@ -1 +1,85 @@
##############################
## Java
##############################
.mtj.tmp/
*.class
*.jar
*.war
*.ear
*.nar
hs_err_pid*
##############################
## Maven
##############################
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
pom.xml.bak
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar
##############################
## Gradle
##############################
/bin/ /bin/
bin/
build/
.gradle
.gradletasknamecache
gradle-app.setting
!gradle-wrapper.jar
##############################
## IntelliJ
##############################
out/
.idea/
.idea_modules/
*.iml
*.ipr
*.iws
##############################
## Eclipse
##############################
.settings/
bin/
tmp/
.metadata
.classpath
.project
*.tmp
*.bak
*.swp
*~.nib
local.properties
.loadpath
.factorypath
##############################
## NetBeans
##############################
nbproject/private/
build/
nbbuild/
dist/
nbdist/
nbactions.xml
nb-configuration.xml
##############################
## Visual Studio Code
##############################
.vscode/
.code-workspace
##############################
## OS X
##############################
.DS_Store

View file

@ -16,6 +16,7 @@ import java.util.Objects;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import src.Protocoles.*; import src.Protocoles.*;
import src.Model.*;
/** /**
* <p> * <p>
@ -23,7 +24,7 @@ import src.Protocoles.*;
* </p> * </p>
*/ */
public class ChatApp { public class ChatApp extends Thread{
/* Liste des utilisateurs actifs */ /* Liste des utilisateurs actifs */
private ListUtilisateurs actifUsers ; private ListUtilisateurs actifUsers ;
@ -196,7 +197,6 @@ public class ChatApp {
return h ; return h ;
} }
} }
public static void main (String[] args) throws IOException { public static void main (String[] args) throws IOException {
ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ; ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ;
System.out.println("On lance le chatapp"); System.out.println("On lance le chatapp");

View file

@ -1,63 +0,0 @@
package src.Controller;
import java.util.ArrayList;
/**
* <p>
* Classe permettant de sauvegarder les échanges entre deux utilisateurs
* </p>
*/
public class Historique {
private Utilisateur User1;
private Utilisateur User2;
// Liste conservant les differents échanges
private ArrayList<MessageHorodate> HistoriqueHorodate ;
/**
* <p>
* Constructeur : un historique sauvegarde les echanges entre
* User1 et User2
* @param User1 - un utilisateur
* @param User2 - un second utilisateur
* </p>
*/
public Historique(Utilisateur User1, Utilisateur User2) {
this.User1 = User1;
this.User2 = User2;
this.HistoriqueHorodate = new ArrayList<MessageHorodate>();
}
/**
* <p>
* On ajoute un message échangé dans la liste 'HistoriqueHorodate'
*
* @param mh - le message horodate échangé
* </p>
*/
public void addMessage(MessageHorodate mh) {
this.HistoriqueHorodate.add(mh);
}
/**
* <p>
* getter pour recuperer le second utilisateur
* </p>
*/
public Utilisateur getUser2() {
return User2;
}
public void afficher10derniers() {
System.out.println("Demarrage de l'affichage partiel de l'historique");
System.out.println("Il y a actuellement " + HistoriqueHorodate.size() +" elements dans l'historique");
int n =10;
if(HistoriqueHorodate.size()<=10) {
n = HistoriqueHorodate.size();
}
for(int i = 0; i<n;i++) {
String exp = HistoriqueHorodate.get(i).getSource().getPseudo();
String payload = HistoriqueHorodate.get(i).getMessage();
System.out.println(exp+" : "+payload);
}
}
}

View file

@ -1,125 +0,0 @@
package src.Controller;
import java.net.InetAddress;
import java.util.ArrayList;
public class ListUtilisateurs {
private ArrayList<Utilisateur> actifUsers ;
public ListUtilisateurs() {
this.actifUsers = new ArrayList<Utilisateur>() ;
}
/**
* Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers'
*
* @param u on va rajouter cet utilisateur dans la liste
*/
public void addList(Utilisateur u) {
if((verifierUnicite(u.getPseudo()))) {
this.actifUsers.add(u);
}
}
/**
* Recuperer un utilisateur à partir de son pseudo
*
* @param pseudo Pseudo de l'utilisateur que l'on souhaite retrouver
*/
public Utilisateur getPseudoList(String pseudo) {
for(Utilisateur elem: this.actifUsers)
{
if (elem.getPseudo().equals(pseudo) ) {
return elem ;
}
}
return null ;
}
public Utilisateur getIPList(InetAddress ip) throws Exception {
for(Utilisateur elem: this.actifUsers)
{
if (elem.getIp().equals(ip) ) {
return elem ;
}
}
throw new Exception("No such user with this IP address") ;
}
/**
* Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur
*
* @param u on va supprimer cet utilisateur dans la liste
*/
public void supprimerList(Utilisateur u) {
Boolean Sup = false ;
for(Utilisateur elem: this.actifUsers)
{
if (elem.equals(u) ) {
this.actifUsers.remove(elem);
Sup = true ;
this.afficherListeUtilisateurs();
}
}
if (!Sup) {
System.out.println("Tentative de retirer un objet non contenu dans la liste");
}
}
/**
* Modifie le nom d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers'
*
* @param ancien correspond au pseudo remplacer
* @param nouveau correspond au nouveau pseudo
*/
public void modifierList(String ancien , String nouveau) {
for(Utilisateur elem: this.actifUsers)
{
if (ancien.equals( elem.getPseudo() ) ) {
this.actifUsers.remove(elem);
elem.setPseudo(nouveau);;
this.addList(elem);
}
}
this.afficherListeUtilisateurs();
}
public Boolean appartient(Utilisateur u) {
return this.actifUsers.contains(u);
}
/**
* Verifie qu'aucun autre utilisateur ne possède le même pseudo
*
* @param u on va supprimer cet utilisateur dans la liste
*/
public Boolean verifierUnicite(String pseudo) {
for(Utilisateur elem: this.actifUsers)
{
if (pseudo.equals( elem.getPseudo() ) ) {
return false ;
}
}
return true;
}
/**
* Méthode affichant la liste des utilisateurs actifs
*
*/
public String afficherListeUtilisateurs() {
System.out.println ("Liste des utilisateurs actifs : ");
String Utilisateur = "" ;
for(Utilisateur elem: this.actifUsers)
{
System.out.println (elem.toString());
Utilisateur += (elem + "\n");
}
return Utilisateur;
}
}

View file

@ -1,142 +0,0 @@
package src.Controller;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.io.Serializable;
/**
* <p>
* Classe representant les messages envoyés en TCP lors d'une session de clavardage
* </p>
*/
public class MessageHorodate implements Serializable {
private Utilisateur destinataire ;
private Utilisateur source ;
private Date dateHorodatage ;
private int type; // 0 = debut de la communication, 1= message de communication, 2 = fin de la communicataion
private String Message;
/**
* <p>
* Constructeur , le message va etre horodate
* @param destinataire - Destinataire du message
* @param source - Source du message
* @param Message - Message envoye
* </p>
*/
public MessageHorodate(Utilisateur destinataire, Utilisateur source, String Message, int type) {
this.setDestinataire(destinataire) ;
this.setSource(source) ;
this.setMessage(Message) ;
this.setDateHorodatage(new Date());
this.type = type;
}
public void setDate(Date d) {
this.setDateHorodatage(d);
}
/**
* <p>
* permet de creer une representation string du message
* @return Les differents attributs de la classe sous forme de string
* </p>
*/
@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 ;
}
/**
* <p>
* permet de creer une representation string de la date d'horodatage
* @return La date d'horodatage du message en format yyyy/MM/dd HH:mm:ss
* </p>
*/
public String dateToString() {
DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
return format.format(this.getDateHorodatage());
}
/**
* <p>
* Permet de re creer un message horodate a partir d'un string
* @return un messageHorodate
* </p>
*/
public static MessageHorodate stringToMessageHorodate(String s) {
String mots[] = s.split("\n");
Utilisateur destinataire = Utilisateur.stringToUtilisateur(mots[0].split("::")[1]);
Utilisateur source = Utilisateur.stringToUtilisateur(mots[1].split("::")[1]);
int type = Integer.parseInt(mots[2].split("::")[1]);
DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
/*try {
date = format.parse(mots[3].split("::")[1]);
} catch (Exception e) {
e.printStackTrace();
}*/
String payload = "";
for(int i=4; i< mots.length; i++) {
if(mots[i].startsWith("Message::")) {
mots[i]=mots[i].split("::")[1];
}
payload += mots[i]+"\n";
}
MessageHorodate mh = new MessageHorodate(destinataire, source, payload, type);
//mh.setDate(date);
return mh ;
}
public Utilisateur getSource() {
return source;
}
public void setSource(Utilisateur source) {
this.source = source;
}
public Utilisateur getDestinataire() {
return destinataire;
}
public void setDestinataire(Utilisateur destinataire) {
this.destinataire = destinataire;
}
public String getMessage() {
return Message;
}
public void setMessage(String message) {
Message = message;
}
public int getType() {
return type;
}
public void setType(int Type) {
this.type = type;
}
public Date getDateHorodatage() {
return dateHorodatage;
}
public void setDateHorodatage(Date dateHorodatage) {
this.dateHorodatage = dateHorodatage;
}
}

View file

@ -1,51 +0,0 @@
package src.Controller;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class Modification_Pseudo extends JPanel{
ChatApp app;
public Modification_Pseudo(String name, ChatApp app) {
this.app = app ;
JLabel Text = new JLabel("Entrez un nouveau nom d'utilisateur!", SwingConstants.CENTER);
JTextField pseudofield = new JTextField(2); // Zone d'insertion de texte
JButton home = new JButton(new ImageIcon("/Users/auriane/Desktop/ChatApp-AL-NM/Implementation/src/images/Home.png"));
//Ajout d'un bouton Valider
JButton Valider = new JButton("Valider");
this.getRootPane().setDefaultButton(Valider);
//Listen to events from the Valider button.
Valider.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
String nouveau = pseudofield.getText();
try {
Boolean resultat = app.modifierPseudo(nouveau);
if(resultat) {
}
else {
//JOptionPane.showMessageDialog(this, "Echec de modification de pseudo, " + nouveau +" deja pris", JOptionPane.WARNING_MESSAGE);
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
this.add(home);
this.add(Text);
this.add(BorderLayout.CENTER,pseudofield);
this.add(BorderLayout.SOUTH,Valider);
}
}

View file

@ -1,77 +0,0 @@
package src.Controller;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Utilisateur extends Object {
private String pseudo ;
private Integer port;
private InetAddress ip ;
private String id ;
public Utilisateur(String pseudo,Integer port, InetAddress ip ){
this.setPseudo(pseudo) ;
this.setPort(port);
this.ip = ip ;
this.id = ip.getHostName() ;
}
public String getPseudo() {
return pseudo;
}
public void setPseudo(String pseudo) {
this.pseudo = pseudo;
}
public Integer getPort() {
return port;
}
public void setPort(Integer port) {
this.port = port;
}
public InetAddress getIp() {
return ip;
}
public String getId() {
return id;
}
@Override
public String toString(){
String s = "";
s+="pseudo " + this.pseudo + " | ";
s+="port " + (this.port).toString() + " | ";
s+="ip " + (this.ip).toString() + " | ";
s+="id " + (this.id).toString() + " | ";
return s;
}
public static Utilisateur stringToUtilisateur(String s) {
String name = "";
Integer port = 0;
String ip = "" ;
String id = "";
String mots[] = s.split(" ");
name=mots[1];
port=Integer.parseInt(mots[4]);
ip=mots[7];
id=mots[10];
Utilisateur user = null;
try {
user = new Utilisateur(name,port,InetAddress.getByName(ip.split("/")[1]));
} catch (UnknownHostException e) {
e.printStackTrace();
}
return user;
}
public Boolean equals(Utilisateur u) {
return this.getId().equals( u.getId() ) ;
}
}

View file

@ -10,13 +10,14 @@ import java.util.ArrayList;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
public class RunnerEcouteTCP implements Runnable { public class RunnerEcouteTCP extends Thread {
public ChatApp app ; public ChatApp app ;
private PropertyChangeSupport pcs; private PropertyChangeSupport pcs;
private ArrayList<SessionClavardage> ListeSessions = new ArrayList<SessionClavardage>(); private ArrayList<SessionClavardage> ListeSessions = new ArrayList<SessionClavardage>();
public RunnerEcouteTCP(ChatApp app) { public RunnerEcouteTCP(ChatApp app) {
this.app = app ; this.app = app ;
this.pcs = new PropertyChangeSupport(this); this.pcs = new PropertyChangeSupport(this);
this.start();
} }

View file

@ -11,8 +11,8 @@ import java.net.Socket;
import java.util.ArrayList; import java.util.ArrayList;
import src.Controller.ChatApp; import src.Controller.ChatApp;
import src.Controller.MessageHorodate; import src.Model.MessageHorodate;
import src.Controller.Utilisateur; import src.Model.Utilisateur;
public class SessionClavardage extends Thread { public class SessionClavardage extends Thread {
private Socket link; private Socket link;
@ -47,7 +47,7 @@ public class SessionClavardage extends Thread {
this.setIn(new ObjectInputStream(s.getInputStream())); this.setIn(new ObjectInputStream(s.getInputStream()));
this.setLink(s); this.setLink(s);
} catch (IOException e) { } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
this.derniersMsg = new ArrayList<MessageHorodate>(); this.derniersMsg = new ArrayList<MessageHorodate>();

View file

@ -14,6 +14,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import src.Controller.*; import src.Controller.*;
import src.Model.*;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;

View file

@ -16,6 +16,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import src.Controller.*; import src.Controller.*;
import src.Model.*;
/** /**
* <p> * <p>
* Classe representant les echanges UDP entre utilisateurs. * Classe representant les echanges UDP entre utilisateurs.

View file

@ -21,6 +21,8 @@ import javax.swing.JTextArea;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import src.Controller.*; import src.Controller.*;
import src.Model.MessageHorodate;
import src.Model.Utilisateur;
import src.Protocoles.SessionClavardage; import src.Protocoles.SessionClavardage;
import java.awt.GridBagLayout; import java.awt.GridBagLayout;

View file

@ -94,9 +94,9 @@ public class View_Accueil implements ActionListener{
ExecutorService execUDP = Executors.newFixedThreadPool(1000); ExecutorService execUDP = Executors.newFixedThreadPool(1000);
System.out.println("Lancement de UDP"); System.out.println("Lancement de UDP");
execUDP.submit(new RunnerEcouteUDP(app)); execUDP.submit(new RunnerEcouteUDP(app));
ExecutorService execTCP = Executors.newFixedThreadPool(1000); /*ExecutorService execTCP = Executors.newFixedThreadPool(1000);
System.out.println("On lance l'écoute TCP de chatapp"); System.out.println("On lance l'écoute TCP de chatapp");
execTCP.submit(new RunnerEcouteTCP(app)); execTCP.submit(new RunnerEcouteTCP(app));*/
Boolean connexion = false ; Boolean connexion = false ;
try { try {
// on tente une connexion avec ce pseudo // on tente une connexion avec ce pseudo

View file

@ -19,6 +19,7 @@ import javax.swing.JTextArea;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import src.Controller.*; import src.Controller.*;
import src.Model.Utilisateur;
import java.awt.GridBagLayout; import java.awt.GridBagLayout;
import java.awt.Font; import java.awt.Font;

View file

@ -37,6 +37,7 @@ import javax.swing.JTextField;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import src.Controller.*; import src.Controller.*;
import src.Model.Utilisateur;
import src.Protocoles.RunnerEcouteTCP; import src.Protocoles.RunnerEcouteTCP;
import src.Protocoles.SessionClavardage; import src.Protocoles.SessionClavardage;
@ -56,7 +57,7 @@ public class View_Menu implements PropertyChangeListener{
JLabel jlabel; JLabel jlabel;
JLabel Txt; JLabel Txt;
WindowAdapter wa ; WindowAdapter wa ;
private RunnerEcouteTCP ecouteTCP;
/* /*
* Constructeur d'une fenetre de menu apres la connexion d'un utilisateur. * Constructeur d'une fenetre de menu apres la connexion d'un utilisateur.
* @param app Un objet de type ChatApp pour posseder toutes les informations de l'utilisateur * @param app Un objet de type ChatApp pour posseder toutes les informations de l'utilisateur
@ -96,10 +97,11 @@ public class View_Menu implements PropertyChangeListener{
// Afficher la fenetre // Afficher la fenetre
frame.pack(); frame.pack();
frame.setVisible(true); frame.setVisible(true);
RunnerEcouteTCP.addPropertyChangeListener(this); ecouteTCP.start();
this.ecouteTCP.addPropertyChangeListener(this); //TODO Problem
} }
/** /**
* Methode static creant un pop-up demandant a l'utilisateur si il souhaite vraiment quitter. * Methode static creant un pop-up demandant a l'utilisateur si il souhaite vraiment quitter.
@ -264,7 +266,9 @@ public class View_Menu implements PropertyChangeListener{
public void propertyChange(PropertyChangeEvent pce) { public void propertyChange(PropertyChangeEvent pce) {
switch(pce.getPropertyName()) { switch(pce.getPropertyName()) {
case "NouvelleSession": case "NouvelleSession":
SessionClavardage session = this.ecouteTCP.getSessionClavardage();
session.addPropertyChangeListener(this);
break;
} }
} }