diff --git a/Implementation/.gitignore b/Implementation/.gitignore index ae3c172..7f6bfa0 100644 --- a/Implementation/.gitignore +++ b/Implementation/.gitignore @@ -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/ +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 diff --git a/Implementation/src/Controller/ChatApp.class b/Implementation/src/Controller/ChatApp.class deleted file mode 100644 index 7f8dc3b..0000000 Binary files a/Implementation/src/Controller/ChatApp.class and /dev/null differ diff --git a/Implementation/src/Controller/ChatApp.java b/Implementation/src/Controller/ChatApp.java index 2aad060..80c92e6 100644 --- a/Implementation/src/Controller/ChatApp.java +++ b/Implementation/src/Controller/ChatApp.java @@ -16,6 +16,7 @@ import java.util.Objects; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import src.Protocoles.*; +import src.Model.*; /** *

@@ -23,7 +24,7 @@ import src.Protocoles.*; *

*/ -public class ChatApp { +public class ChatApp extends Thread{ /* Liste des utilisateurs actifs */ private ListUtilisateurs actifUsers ; @@ -196,7 +197,6 @@ public class ChatApp { return h ; } } - public static void main (String[] args) throws IOException { ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ; System.out.println("On lance le chatapp"); diff --git a/Implementation/src/Controller/Historique.class b/Implementation/src/Controller/Historique.class deleted file mode 100644 index ded444c..0000000 Binary files a/Implementation/src/Controller/Historique.class and /dev/null differ diff --git a/Implementation/src/Controller/Historique.java b/Implementation/src/Controller/Historique.java deleted file mode 100644 index 270502a..0000000 --- a/Implementation/src/Controller/Historique.java +++ /dev/null @@ -1,63 +0,0 @@ -package src.Controller; - -import java.util.ArrayList; - -/** -*

-* Classe permettant de sauvegarder les échanges entre deux utilisateurs -*

-*/ -public class Historique { - private Utilisateur User1; - private Utilisateur User2; - // Liste conservant les differents échanges - private ArrayList HistoriqueHorodate ; - - /** - *

- * Constructeur : un historique sauvegarde les echanges entre - * User1 et User2 - * @param User1 - un utilisateur - * @param User2 - un second utilisateur - *

- */ - public Historique(Utilisateur User1, Utilisateur User2) { - this.User1 = User1; - this.User2 = User2; - this.HistoriqueHorodate = new ArrayList(); - } - - /** - *

- * On ajoute un message échangé dans la liste 'HistoriqueHorodate' - * - * @param mh - le message horodate échangé - *

- */ - public void addMessage(MessageHorodate mh) { - this.HistoriqueHorodate.add(mh); - } - - /** - *

- * getter pour recuperer le second utilisateur - *

- */ - 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 actifUsers ; - - public ListUtilisateurs() { - this.actifUsers = new ArrayList() ; - } - /** - * 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; - } -} diff --git a/Implementation/src/Controller/MessageHorodate.class b/Implementation/src/Controller/MessageHorodate.class deleted file mode 100644 index 23acfdb..0000000 Binary files a/Implementation/src/Controller/MessageHorodate.class and /dev/null differ diff --git a/Implementation/src/Controller/MessageHorodate.java b/Implementation/src/Controller/MessageHorodate.java deleted file mode 100644 index cb2f3bf..0000000 --- a/Implementation/src/Controller/MessageHorodate.java +++ /dev/null @@ -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; -/** -*

-* Classe representant les messages envoyés en TCP lors d'une session de clavardage -*

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

- * Constructeur , le message va etre horodate - * @param destinataire - Destinataire du message - * @param source - Source du message - * @param Message - Message envoye - *

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

- * permet de creer une representation string du message - * @return Les differents attributs de la classe sous forme de string - *

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

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

- */ - public String dateToString() { - DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - return format.format(this.getDateHorodatage()); - } - - - /** - *

- * Permet de re creer un message horodate a partir d'un string - * @return un messageHorodate - *

- */ - 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; - } - -} diff --git a/Implementation/src/Controller/Modification_Pseudo.java b/Implementation/src/Controller/Modification_Pseudo.java deleted file mode 100644 index e34b110..0000000 --- a/Implementation/src/Controller/Modification_Pseudo.java +++ /dev/null @@ -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); - -} -} diff --git a/Implementation/src/Controller/Utilisateur.class b/Implementation/src/Controller/Utilisateur.class deleted file mode 100644 index c8573fc..0000000 Binary files a/Implementation/src/Controller/Utilisateur.class and /dev/null differ diff --git a/Implementation/src/Controller/Utilisateur.java b/Implementation/src/Controller/Utilisateur.java deleted file mode 100644 index 9a35547..0000000 --- a/Implementation/src/Controller/Utilisateur.java +++ /dev/null @@ -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() ) ; - } - -} diff --git a/Implementation/src/Protocoles/RunnerEcouteTCP.class b/Implementation/src/Protocoles/RunnerEcouteTCP.class deleted file mode 100644 index ffc55ae..0000000 Binary files a/Implementation/src/Protocoles/RunnerEcouteTCP.class and /dev/null differ diff --git a/Implementation/src/Protocoles/RunnerEcouteTCP.java b/Implementation/src/Protocoles/RunnerEcouteTCP.java index d09e6ea..e18732c 100644 --- a/Implementation/src/Protocoles/RunnerEcouteTCP.java +++ b/Implementation/src/Protocoles/RunnerEcouteTCP.java @@ -10,13 +10,14 @@ import java.util.ArrayList; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -public class RunnerEcouteTCP implements Runnable { +public class RunnerEcouteTCP extends Thread { public ChatApp app ; private PropertyChangeSupport pcs; private ArrayList ListeSessions = new ArrayList(); public RunnerEcouteTCP(ChatApp app) { this.app = app ; this.pcs = new PropertyChangeSupport(this); + this.start(); } diff --git a/Implementation/src/Protocoles/RunnerEcouteUDP.class b/Implementation/src/Protocoles/RunnerEcouteUDP.class deleted file mode 100644 index 9644cab..0000000 Binary files a/Implementation/src/Protocoles/RunnerEcouteUDP.class and /dev/null differ diff --git a/Implementation/src/Protocoles/RunnerTCPEcoute.class b/Implementation/src/Protocoles/RunnerTCPEcoute.class deleted file mode 100644 index 72aef14..0000000 Binary files a/Implementation/src/Protocoles/RunnerTCPEcoute.class and /dev/null differ diff --git a/Implementation/src/Protocoles/RunnerTCPEnvoi.class b/Implementation/src/Protocoles/RunnerTCPEnvoi.class deleted file mode 100644 index 59236e7..0000000 Binary files a/Implementation/src/Protocoles/RunnerTCPEnvoi.class and /dev/null differ diff --git a/Implementation/src/Protocoles/RunnerUDP.class b/Implementation/src/Protocoles/RunnerUDP.class deleted file mode 100644 index 8708f02..0000000 Binary files a/Implementation/src/Protocoles/RunnerUDP.class and /dev/null differ diff --git a/Implementation/src/Protocoles/SessionClavardage.class b/Implementation/src/Protocoles/SessionClavardage.class deleted file mode 100644 index b86f313..0000000 Binary files a/Implementation/src/Protocoles/SessionClavardage.class and /dev/null differ diff --git a/Implementation/src/Protocoles/SessionClavardage.java b/Implementation/src/Protocoles/SessionClavardage.java index d3e3754..a39e98a 100644 --- a/Implementation/src/Protocoles/SessionClavardage.java +++ b/Implementation/src/Protocoles/SessionClavardage.java @@ -11,8 +11,8 @@ import java.net.Socket; import java.util.ArrayList; import src.Controller.ChatApp; -import src.Controller.MessageHorodate; -import src.Controller.Utilisateur; +import src.Model.MessageHorodate; +import src.Model.Utilisateur; public class SessionClavardage extends Thread { private Socket link; @@ -47,7 +47,7 @@ public class SessionClavardage extends Thread { this.setIn(new ObjectInputStream(s.getInputStream())); this.setLink(s); } catch (IOException e) { - // TODO Auto-generated catch block + e.printStackTrace(); } this.derniersMsg = new ArrayList(); diff --git a/Implementation/src/Protocoles/TCPEchange.class b/Implementation/src/Protocoles/TCPEchange.class deleted file mode 100644 index e419fcf..0000000 Binary files a/Implementation/src/Protocoles/TCPEchange.class and /dev/null differ diff --git a/Implementation/src/Protocoles/TCPEchange.java b/Implementation/src/Protocoles/TCPEchange.java index 77c8be5..3cd5239 100644 --- a/Implementation/src/Protocoles/TCPEchange.java +++ b/Implementation/src/Protocoles/TCPEchange.java @@ -14,6 +14,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import src.Controller.*; +import src.Model.*; import java.io.BufferedReader; import java.io.IOException; diff --git a/Implementation/src/Protocoles/UDPEchange.class b/Implementation/src/Protocoles/UDPEchange.class deleted file mode 100644 index a69ae9c..0000000 Binary files a/Implementation/src/Protocoles/UDPEchange.class and /dev/null differ diff --git a/Implementation/src/Protocoles/UDPEchange.java b/Implementation/src/Protocoles/UDPEchange.java index 9fbb3ac..a21a95d 100644 --- a/Implementation/src/Protocoles/UDPEchange.java +++ b/Implementation/src/Protocoles/UDPEchange.java @@ -16,6 +16,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import src.Controller.*; +import src.Model.*; /** *

* Classe representant les echanges UDP entre utilisateurs. diff --git a/Implementation/src/View/ViewSession.java b/Implementation/src/View/ViewSession.java index 1a7077b..1110cd0 100644 --- a/Implementation/src/View/ViewSession.java +++ b/Implementation/src/View/ViewSession.java @@ -21,6 +21,8 @@ import javax.swing.JTextArea; import javax.swing.SwingConstants; import src.Controller.*; +import src.Model.MessageHorodate; +import src.Model.Utilisateur; import src.Protocoles.SessionClavardage; import java.awt.GridBagLayout; diff --git a/Implementation/src/View/View_Accueil.java b/Implementation/src/View/View_Accueil.java index 92b24f1..f795819 100644 --- a/Implementation/src/View/View_Accueil.java +++ b/Implementation/src/View/View_Accueil.java @@ -94,9 +94,9 @@ public class View_Accueil implements ActionListener{ ExecutorService execUDP = Executors.newFixedThreadPool(1000); System.out.println("Lancement de UDP"); 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"); - execTCP.submit(new RunnerEcouteTCP(app)); + execTCP.submit(new RunnerEcouteTCP(app));*/ Boolean connexion = false ; try { // on tente une connexion avec ce pseudo diff --git a/Implementation/src/View/View_Clavardage.java b/Implementation/src/View/View_Clavardage.java index a5d73ca..4adfbf6 100644 --- a/Implementation/src/View/View_Clavardage.java +++ b/Implementation/src/View/View_Clavardage.java @@ -19,6 +19,7 @@ import javax.swing.JTextArea; import javax.swing.SwingConstants; import src.Controller.*; +import src.Model.Utilisateur; import java.awt.GridBagLayout; import java.awt.Font; diff --git a/Implementation/src/View/View_Menu.java b/Implementation/src/View/View_Menu.java index 800e858..6576c7f 100644 --- a/Implementation/src/View/View_Menu.java +++ b/Implementation/src/View/View_Menu.java @@ -37,6 +37,7 @@ import javax.swing.JTextField; import javax.swing.SwingConstants; import src.Controller.*; +import src.Model.Utilisateur; import src.Protocoles.RunnerEcouteTCP; import src.Protocoles.SessionClavardage; @@ -56,7 +57,7 @@ public class View_Menu implements PropertyChangeListener{ JLabel jlabel; JLabel Txt; WindowAdapter wa ; - + private RunnerEcouteTCP ecouteTCP; /* * 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 @@ -96,10 +97,11 @@ public class View_Menu implements PropertyChangeListener{ // Afficher la fenetre frame.pack(); 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. @@ -264,7 +266,9 @@ public class View_Menu implements PropertyChangeListener{ public void propertyChange(PropertyChangeEvent pce) { switch(pce.getPropertyName()) { case "NouvelleSession": - + SessionClavardage session = this.ecouteTCP.getSessionClavardage(); + session.addPropertyChangeListener(this); + break; } }