diff --git a/chatGitElise/bin/controller/Agent.class b/chatGitElise/bin/controller/Agent.class index e9d7a0d..cdc56c5 100644 Binary files a/chatGitElise/bin/controller/Agent.class and b/chatGitElise/bin/controller/Agent.class differ diff --git a/chatGitElise/bin/controller/DataBase.class b/chatGitElise/bin/controller/DataBase.class index 1520d67..d755e8c 100644 Binary files a/chatGitElise/bin/controller/DataBase.class and b/chatGitElise/bin/controller/DataBase.class differ diff --git a/chatGitElise/bin/gui/FenetreChat$1.class b/chatGitElise/bin/gui/FenetreChat$1.class index a4a8b67..484bf98 100644 Binary files a/chatGitElise/bin/gui/FenetreChat$1.class and b/chatGitElise/bin/gui/FenetreChat$1.class differ diff --git a/chatGitElise/bin/gui/FenetreChat$2.class b/chatGitElise/bin/gui/FenetreChat$2.class index a6540b5..ee35828 100644 Binary files a/chatGitElise/bin/gui/FenetreChat$2.class and b/chatGitElise/bin/gui/FenetreChat$2.class differ diff --git a/chatGitElise/bin/gui/FenetreChat$3.class b/chatGitElise/bin/gui/FenetreChat$3.class index 3701abf..6f41c0a 100644 Binary files a/chatGitElise/bin/gui/FenetreChat$3.class and b/chatGitElise/bin/gui/FenetreChat$3.class differ diff --git a/chatGitElise/bin/gui/FenetreChat.class b/chatGitElise/bin/gui/FenetreChat.class index 69c358c..5890bcf 100644 Binary files a/chatGitElise/bin/gui/FenetreChat.class and b/chatGitElise/bin/gui/FenetreChat.class differ diff --git a/chatGitElise/bin/gui/FenetreConnexion$1.class b/chatGitElise/bin/gui/FenetreConnexion$1.class index da717f4..f35b91e 100644 Binary files a/chatGitElise/bin/gui/FenetreConnexion$1.class and b/chatGitElise/bin/gui/FenetreConnexion$1.class differ diff --git a/chatGitElise/bin/gui/FenetreConnexion$2.class b/chatGitElise/bin/gui/FenetreConnexion$2.class index 8bda291..598bf0d 100644 Binary files a/chatGitElise/bin/gui/FenetreConnexion$2.class and b/chatGitElise/bin/gui/FenetreConnexion$2.class differ diff --git a/chatGitElise/bin/gui/FenetreConnexion.class b/chatGitElise/bin/gui/FenetreConnexion.class index 4fdf198..340da2f 100644 Binary files a/chatGitElise/bin/gui/FenetreConnexion.class and b/chatGitElise/bin/gui/FenetreConnexion.class differ diff --git a/chatGitElise/bin/gui/FenetreInscription$1.class b/chatGitElise/bin/gui/FenetreInscription$1.class index a700a6d..9e1551b 100644 Binary files a/chatGitElise/bin/gui/FenetreInscription$1.class and b/chatGitElise/bin/gui/FenetreInscription$1.class differ diff --git a/chatGitElise/bin/gui/FenetreInscription$2.class b/chatGitElise/bin/gui/FenetreInscription$2.class index ab02281..ff76555 100644 Binary files a/chatGitElise/bin/gui/FenetreInscription$2.class and b/chatGitElise/bin/gui/FenetreInscription$2.class differ diff --git a/chatGitElise/bin/gui/FenetreInscription$3.class b/chatGitElise/bin/gui/FenetreInscription$3.class index f179fda..71e8635 100644 Binary files a/chatGitElise/bin/gui/FenetreInscription$3.class and b/chatGitElise/bin/gui/FenetreInscription$3.class differ diff --git a/chatGitElise/bin/gui/FenetreInscription$4.class b/chatGitElise/bin/gui/FenetreInscription$4.class index 49a9341..ad331ab 100644 Binary files a/chatGitElise/bin/gui/FenetreInscription$4.class and b/chatGitElise/bin/gui/FenetreInscription$4.class differ diff --git a/chatGitElise/bin/gui/FenetreInscription.class b/chatGitElise/bin/gui/FenetreInscription.class index c14494b..57367e7 100644 Binary files a/chatGitElise/bin/gui/FenetreInscription.class and b/chatGitElise/bin/gui/FenetreInscription.class differ diff --git a/chatGitElise/bin/gui/FenetreMenu$1.class b/chatGitElise/bin/gui/FenetreMenu$1.class index 84666c3..555eed6 100644 Binary files a/chatGitElise/bin/gui/FenetreMenu$1.class and b/chatGitElise/bin/gui/FenetreMenu$1.class differ diff --git a/chatGitElise/bin/gui/FenetreMenu$2.class b/chatGitElise/bin/gui/FenetreMenu$2.class index 4ebb0a7..3e81c52 100644 Binary files a/chatGitElise/bin/gui/FenetreMenu$2.class and b/chatGitElise/bin/gui/FenetreMenu$2.class differ diff --git a/chatGitElise/bin/gui/FenetreMenu$3.class b/chatGitElise/bin/gui/FenetreMenu$3.class index 03265cf..66a8dd4 100644 Binary files a/chatGitElise/bin/gui/FenetreMenu$3.class and b/chatGitElise/bin/gui/FenetreMenu$3.class differ diff --git a/chatGitElise/bin/gui/FenetreMenu$4.class b/chatGitElise/bin/gui/FenetreMenu$4.class index 655af95..1f8eedf 100644 Binary files a/chatGitElise/bin/gui/FenetreMenu$4.class and b/chatGitElise/bin/gui/FenetreMenu$4.class differ diff --git a/chatGitElise/bin/gui/FenetreMenu$5.class b/chatGitElise/bin/gui/FenetreMenu$5.class index 963f4be..833c83c 100644 Binary files a/chatGitElise/bin/gui/FenetreMenu$5.class and b/chatGitElise/bin/gui/FenetreMenu$5.class differ diff --git a/chatGitElise/bin/gui/FenetreMenu.class b/chatGitElise/bin/gui/FenetreMenu.class index c88cc10..b0dac43 100644 Binary files a/chatGitElise/bin/gui/FenetreMenu.class and b/chatGitElise/bin/gui/FenetreMenu.class differ diff --git a/chatGitElise/bin/gui/FenetreModifPseudo.class b/chatGitElise/bin/gui/FenetreModifPseudo.class index 44c377f..eedc77a 100644 Binary files a/chatGitElise/bin/gui/FenetreModifPseudo.class and b/chatGitElise/bin/gui/FenetreModifPseudo.class differ diff --git a/chatGitElise/bin/model/Contact.class b/chatGitElise/bin/model/Contact.class index 11ac147..fd3bdb1 100644 Binary files a/chatGitElise/bin/model/Contact.class and b/chatGitElise/bin/model/Contact.class differ diff --git a/chatGitElise/bin/model/ListeContacts.class b/chatGitElise/bin/model/ListeContacts.class index e9539f2..96f58c2 100644 Binary files a/chatGitElise/bin/model/ListeContacts.class and b/chatGitElise/bin/model/ListeContacts.class differ diff --git a/chatGitElise/bin/model/Message.class b/chatGitElise/bin/model/Message.class index 37ec734..52f426c 100644 Binary files a/chatGitElise/bin/model/Message.class and b/chatGitElise/bin/model/Message.class differ diff --git a/chatGitElise/bin/model/MessageChat.class b/chatGitElise/bin/model/MessageChat.class index dd19d37..957a6f8 100644 Binary files a/chatGitElise/bin/model/MessageChat.class and b/chatGitElise/bin/model/MessageChat.class differ diff --git a/chatGitElise/bin/model/MessagePseudo.class b/chatGitElise/bin/model/MessagePseudo.class index 30cc222..2130b6d 100644 Binary files a/chatGitElise/bin/model/MessagePseudo.class and b/chatGitElise/bin/model/MessagePseudo.class differ diff --git a/chatGitElise/bin/network/TCPChat.class b/chatGitElise/bin/network/TCPChat.class index e383195..07f116c 100644 Binary files a/chatGitElise/bin/network/TCPChat.class and b/chatGitElise/bin/network/TCPChat.class differ diff --git a/chatGitElise/bin/network/TCPServer.class b/chatGitElise/bin/network/TCPServer.class index 0505bf3..e488035 100644 Binary files a/chatGitElise/bin/network/TCPServer.class and b/chatGitElise/bin/network/TCPServer.class differ diff --git a/chatGitElise/bin/network/Tools.class b/chatGitElise/bin/network/Tools.class index 51937ca..818be3c 100644 Binary files a/chatGitElise/bin/network/Tools.class and b/chatGitElise/bin/network/Tools.class differ diff --git a/chatGitElise/bin/network/UDPInput.class b/chatGitElise/bin/network/UDPInput.class index 2ef80d5..d1fdf1a 100644 Binary files a/chatGitElise/bin/network/UDPInput.class and b/chatGitElise/bin/network/UDPInput.class differ diff --git a/chatGitElise/bin/network/UDPOutput.class b/chatGitElise/bin/network/UDPOutput.class index 0da22b5..46dd203 100644 Binary files a/chatGitElise/bin/network/UDPOutput.class and b/chatGitElise/bin/network/UDPOutput.class differ diff --git a/chatGitElise/config.json b/chatGitElise/config.json index 63c82f4..0cf120b 100644 --- a/chatGitElise/config.json +++ b/chatGitElise/config.json @@ -5,8 +5,8 @@ "port": 8080 }, "config":{ - "interface": "wlan3", - "portSrc": 26001, - "portDest":26000 + "interface": "wlan4", + "portSrc": 26000, + "portDest":26001 } } \ No newline at end of file diff --git a/chatGitElise/src/config/Configuration.java b/chatGitElise/src/config/Configuration.java index e1276aa..1085287 100644 --- a/chatGitElise/src/config/Configuration.java +++ b/chatGitElise/src/config/Configuration.java @@ -7,8 +7,8 @@ public class Configuration { - private SConf sConf; - private Conf conf; + private SConf sConf; //Configuration du serveur + private Conf conf; //Configuration réseau public Configuration() { diff --git a/chatGitElise/src/controller/Agent.java b/chatGitElise/src/controller/Agent.java index 14f3e38..37a3d11 100644 --- a/chatGitElise/src/controller/Agent.java +++ b/chatGitElise/src/controller/Agent.java @@ -30,9 +30,7 @@ public class Agent implements PropertyChangeListener{ private Contact user; private UDPInput BIn; private UDPOutput BOut; - //private TCPChat TCPSend; private TCPServer server; - //private ListeContacts list; private InetAddress localAddress; private InetAddress broadcast; private ArrayList listTCPOk; @@ -43,15 +41,13 @@ public class Agent implements PropertyChangeListener{ private boolean open = true; - + //Création d'un agent lors de l'inscription (première connexion) public Agent(InetAddress address, int portIn, int portOut) throws IOException { this.user = new Contact("", address, portIn); this.BIn = new UDPInput(user.getAddress(), portIn); this.BOut = new UDPOutput(user, portOut); this.server = new TCPServer(user.getPort(), user.getAddress()); this.server.addPropertyChangeListener(this); - //this.TCPSend = new TCPChat(user); - //this.list = ListeContacts.getInstance(); this.localAddress=Tools.getAdress()[0]; this.broadcast= Tools.getAdress()[1]; this.db = DataBase.getInstance(); @@ -62,7 +58,7 @@ public class Agent implements PropertyChangeListener{ BIn.start(); } - //user ayant déjà fait une connexion + //Création d'un agent par un user ayant déjà fait une connexion public Agent(InetAddress address, int portIn, int portOut, String login) throws IOException { this.db = DataBase.getInstance(); this.user = new Contact(db.getPseudoFromLogin(login), address, portIn); @@ -70,8 +66,6 @@ public class Agent implements PropertyChangeListener{ this.BOut = new UDPOutput(user, portOut); this.server = new TCPServer(user.getPort(), user.getAddress()); this.server.addPropertyChangeListener(this); - //this.TCPSend = new TCPChat(user); - //this.list = ListeContacts.getInstance(); this.localAddress=Tools.getAdress()[0]; this.broadcast= Tools.getAdress()[1]; this.listTCPOk = new ArrayList(); @@ -85,7 +79,6 @@ public class Agent implements PropertyChangeListener{ public void propertyChange(PropertyChangeEvent evt) { switch (evt.getPropertyName()) { case "Msg UDP Recu" : - //System.out.println("envoi message"); Message msg = BIn.getMessage(); try { handleMessage(msg); @@ -94,7 +87,6 @@ public class Agent implements PropertyChangeListener{ } break; case "session chat demarree" : - //System.out.println("dans session demarree"); TCPChat tcpChat = this.server.getConnexionTCPChat(); tcpChat.addPropertyChangeListener(this); this.listTCPOk.add(tcpChat); @@ -105,10 +97,8 @@ public class Agent implements PropertyChangeListener{ SimpleAttributeSet left = new SimpleAttributeSet(); StyleConstants.setAlignment(left, StyleConstants.ALIGN_LEFT); StyleConstants.setForeground(left, c.brighter()); - //System.out.println("dans property change"); TCPChat tcpChatCo = this.listTCPOk.get(0); MessageChat msgRecu = tcpChatCo.getMessageRecu(); - //FenetreChat.getTa().append("kevin"+ " : "+msgRecu.getMessage()+"\n"); if(FenetreChat.isOuvert()) { StyledDocument doc = FenetreChat.getDoc(); try { @@ -127,55 +117,56 @@ public class Agent implements PropertyChangeListener{ - /*type 0 : premier message de broadcast + /* type 0 : premier message de broadcast * type, 1 : deuxieme message de broadcast avec pseudo * type 2 : Message de déconnexion * type 3 : message pseudo changé - * type 4 : Message affichage - * type 5 : Message chat */ public void handleMessage(Message msg) throws IOException { switch(msg.getTypeMessage()) { + + //message broadcast sans pseudo pour signaler son arrivée + //action : répondre par un message avec notre pseudo case 0 : - //System.out.println("Envoi message présentation"); MessagePseudo msgPresentation = new MessagePseudo(this.localAddress, msg.getAddressSrc(), this.user.getPort(), msg.getPortSrc(), 1, this.user.getPseudo(), this.user.getId(), ""); BOut.send(msgPresentation, msg.getAddressSrc(), msg.getPortSrc()); break; + + //message broadcast avec pseudo + //action : on vérifie que le pseudo appartient à une personne active dans la liste du serveur et on l'ajoute dans la liste de la fenetre menu case 1 : MessagePseudo msgPseudo = (MessagePseudo) msg; boolean pseudoExist = Request.sendPseudo(msgPseudo.getPseudo(), "pseudoOK"); if(!pseudoExist) { Contact newUser = new Contact(msgPseudo.getPseudo(), msgPseudo.getAddressSrc(), msgPseudo.getPortSrc()); - //Request.sendUser(msgPseudo.getPseudo(), msgPseudo.getAddressSrc().toString(), Integer.toString(msgPseudo.getPortSrc()), "addUser"); - //list.addContact(newUser); if(FenetreMenu.ouvert) { FenetreMenu.getCb().addItem(newUser.getPseudo()); } } break; + //message de deconnexion + //action : vérifier que le pseudo n'existe plus dans la liste des actifs du serveur et le supprimer de la liste de la fenetre menu + //fermeture de la fenetre chat entre le user et la personne qui se deconnecte si elle est ouverte case 2 : MessagePseudo messageDeconnexion = (MessagePseudo) msg; boolean pseudoExiste = Request.sendPseudo(messageDeconnexion.getPseudo(), "pseudoOK"); if(pseudoExiste){ - //Request.sendDeconnexion(Integer.toString(messageDeconnexion.getId()),messageDeconnexion.getPseudo(), "deconnexion"); FenetreMenu.getCb().removeItem(messageDeconnexion.getPseudo()); } - //fermeture de la fenetre chat le user et la personne qui se deconnecte if(FenetreChat.isOuvert()&&FenetreChat.getDest().getPseudo().equals(messageDeconnexion.getPseudo())) { FenetreChat.fermer(); - //getTCPChat().getSocket().close(); } break; + //message pseudo changé + //action : mettre à jour la liste des users de la fenetre pseudo avec le nouveau pseudo case 3 : MessagePseudo messageNewPseudo = (MessagePseudo) msg; this.open = false; - //Contact contact = list.findContact(messageNewPseudo.getPseudo()); - //int id = this.db.getIdFromPseudo(contact.getPseudo()); - for(int i = 0 ; i inscription public boolean connectInscription(String pseudo, String login) throws IOException, InterruptedException { + + //Envoi d'un message de broadcast sans pseudo MessagePseudo msg_connexion = new MessagePseudo(this.localAddress, this.broadcast, this.user.getPort(), App.portDest, 0, "", this.user.getId(), ""); BOut.send(msg_connexion, this.broadcast, App.portDest); + + //Attente pour avoir le temps de recevoir les réponses des users actifs Thread.sleep(2000); + + //On gère toutes les réponses reçues après notre broadcast ArrayList msg_recus = BIn.getListMessage(); for(int i =0; i msg_recus = BIn.getListMessage(); for(int i =0; i getListeTCPChat(){ return listTCPDeg; } diff --git a/chatGitElise/src/controller/DataBase.java b/chatGitElise/src/controller/DataBase.java index 0e1f293..bf809b1 100644 --- a/chatGitElise/src/controller/DataBase.java +++ b/chatGitElise/src/controller/DataBase.java @@ -24,7 +24,6 @@ public class DataBase { } try { connexion = DriverManager.getConnection("jdbc:mysql://srv-bdens.insa-toulouse.fr:3306/tp_servlet_018?useSSL=false", "tp_servlet_018", "Taey2Aje"); - //connexion = DriverManager.getConnection("jdbc:mysql://localhost/test?characterEncoding=utf8", "root","root"); }catch(SQLException e) { e.printStackTrace(); } @@ -40,6 +39,7 @@ public class DataBase { } } + //Ajout d'un user //retourne l'id associé au user ajouté public int addUser(String pseudo, String login) { String query = "INSERT INTO users (pseudo, statut, login) VALUES (?, ?, ?)"; @@ -116,7 +116,6 @@ public class DataBase { } catch (SQLException e) { e.printStackTrace(); } - //System.out.println("loginAux = "+loginAux); return !(loginAux==null); } @@ -180,10 +179,11 @@ public class DataBase { } } - //chat table : nom : id1id2 + //chat table : + //nom : idSrcidDest //colonnes : //id (l'id unique du message) - //id1 et id2 les id des deux users qui se parlent + //idSrc et idDest : les id des deux users qui se parlent //message : le message envoyé //date : la date d'envoi du msg public void newChatTable (int id1, int id2) { @@ -232,7 +232,7 @@ public class DataBase { return res; } -//il faut mettre dans l'ordre idSrc pour id1 et id Dest pour id2 dans les params + //il faut mettre dans l'ordre idSrc pour id1 et id Dest pour id2 dans les params public void addMessage(int id1, int id2, String message) { int idSrc = id1; int idDest = id2; diff --git a/chatGitElise/src/gui/FenetreChat.java b/chatGitElise/src/gui/FenetreChat.java index d47a16f..7257245 100644 --- a/chatGitElise/src/gui/FenetreChat.java +++ b/chatGitElise/src/gui/FenetreChat.java @@ -8,7 +8,6 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.io.File; import java.io.IOException; import java.net.InetAddress; import java.sql.SQLException; @@ -16,7 +15,6 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; -import java.util.List; import javax.swing.*; import javax.swing.border.Border; @@ -71,10 +69,11 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ this.frame = new JFrame("Fenetre Chat avec "+ userString); this.agent = agent; this.user = agent.getUser(); - //this.dest = agent.getList().findContact(userString); this.dest = Request.getUser(userString, "getUser"); InetAddress adr = dest.getAddress(); + + //Récupération du TCPChat associé au dest for(TCPChat tcp : agent.getListeTCPChat()) { if(tcp.getSocket().getInetAddress().equals(adr)) { t=tcp; @@ -91,12 +90,6 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ public void windowClosing(WindowEvent e) { int quitter = FenetreMenu.fenetreFermeture(); if(quitter == 0) { - /*try { - t.getSocket().close(); - } catch (IOException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - }*/ frame.dispose(); } }}; @@ -105,7 +98,6 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ this.panel.setOpaque(false); this.addWidgets(); - //frame.getContentPane().add(panel, BorderLayout.CENTER); afficherHistorique(); frame.getRootPane().setDefaultButton(envoyer); @@ -140,7 +132,7 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE}; this.frame.getContentPane().setLayout(gridBagLayout); - //zone pour rentrer les message à envoyer + //zone pour entrer les message à envoyer text = new JTextArea(10, 3); text.setForeground(Color.WHITE); text.setBackground(Color.GRAY); @@ -188,13 +180,15 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ envoyer.addActionListener(new ActionListener() { private Date date; public void actionPerformed(ActionEvent e) { + + //récupération du texte entré par le user String message = text.getText(); - //System.out.println("Message :"+ message); - //System.out.println(dest); + + //récupération id user et dest int idUser = agent.getDb().getIdFromPseudo(user.getPseudo()); - //System.out.println("IDuser = "+idUser); int idDest = agent.getDb().getIdFromPseudo(dest.getPseudo()); - //System.out.println("IDdest = "+idDest); + + //récupération du TCPChat associé au dest try { TCPChat tcpChat = null; for(TCPChat tcp : agent.getListeTCPChat()) { @@ -204,16 +198,29 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ } text.setText(""); + + //Création de la date du message this.setDate(new Date()); DateFormat format = new SimpleDateFormat(" (yyyy/MM/dd HH:mm:ss)"); String dateString = format.format(this.date); + + //Envoi du message tcpChat.sendMsg(message); + + //Affichage du message et de la date doc.insertString(doc.getLength(), "\n"+message+dateString, right ); doc.setParagraphAttributes(doc.getLength(), 1, right, false); text.setCaretPosition(text.getDocument().getLength()); + + //Si le chat entre user et dest existe déjà dans la base de donnée if(agent.getDb().tableChatExists(idUser, idDest)) { + + //ajout du message dans la table agent.getDb().addMessage(idUser, idDest, message); + + //Sinon }else { + //Création de la table et ajout du message agent.getDb().newChatTable(idUser, idDest); agent.getDb().addMessage(idUser, idDest, message); } @@ -270,17 +277,21 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ SimpleAttributeSet left = new SimpleAttributeSet(); StyleConstants.setAlignment(left, StyleConstants.ALIGN_LEFT); StyleConstants.setForeground(left, c.brighter()); + int idUser = agent.getDb().getIdFromPseudo(user.getPseudo()); - //System.out.println("IDuser = "+idUser); int idDest = agent.getDb().getIdFromPseudo(dest.getPseudo()); + if(agent.getDb().tableChatExists(idUser, idDest)) { + ArrayList historic = null; try { historic = agent.getDb().getHistoric(idUser, idDest); } catch (SQLException e2) { e2.printStackTrace(); } + for(MessageAffichage msg : historic) { + if(msg.getId() == idUser) { try { doc.insertString(doc.getLength(), "\n"+msg.getMessage(), right ); @@ -303,7 +314,6 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ public void propertyChange(PropertyChangeEvent evt) { switch(evt.getPropertyName()){ case "deconnexion" : - System.out.println("Je suis dans deconnexion"); InetAddress adr = dest.getAddress(); TCPChat t=null; for(TCPChat tcp : agent.getListeTCPChat()) { @@ -314,7 +324,6 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ try { t.getSocket().close(); } catch (IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); } agent.getListeTCPChat().remove(t); diff --git a/chatGitElise/src/gui/FenetreConnexion.java b/chatGitElise/src/gui/FenetreConnexion.java index 23e83db..ce927e4 100644 --- a/chatGitElise/src/gui/FenetreConnexion.java +++ b/chatGitElise/src/gui/FenetreConnexion.java @@ -41,7 +41,6 @@ public class FenetreConnexion implements ActionListener { */ public FenetreConnexion() { try { - //here you can put the selected theme class name in JTattoo UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel"); } catch (ClassNotFoundException ex) { @@ -53,15 +52,20 @@ public class FenetreConnexion implements ActionListener { } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } + //creer une instance JFrame frame = new JFrame("Fenetre connexion"); + //sortir quand l’utilisateur ferme le frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // fixer les dimensions de la fenetre frame.setSize(new Dimension(120, 40)); + //Creer le JPanel panel = new JPanel(new GridLayout(4,1)); panel.setOpaque(false); + //Ajouter les elements this.addWidgets(); try { @@ -74,12 +78,16 @@ public class FenetreConnexion implements ActionListener { } catch (IOException e) { throw new RuntimeException(e); } + //Set the default button. frame.getRootPane().setDefaultButton(Connexion); + //Ajouter le panel a la window frame.getContentPane().add(panel, BorderLayout.CENTER); + //L'utilisateur ne pourra pas aggrandir la fenetre this.frame.setResizable(false); + //Afficher la fenetre frame.pack(); frame.setVisible(true); @@ -88,98 +96,123 @@ public class FenetreConnexion implements ActionListener { private void addWidgets() { // Créer Zone d'insertion de texte pour le pseudo this.pseudofield = new JTextField(2); + // creation d'un label qui contiendra un txt au centre this.Text = new JLabel("Type your login", SwingConstants.CENTER); this.Text.setForeground(Color.white); this.Text.setOpaque(false); + //Ajout d'un bouton Connexion this.Connexion = new JButton("Connexion"); this.Cancel = new JButton("Cancel"); this.Connexion.addActionListener(this); this.Cancel.addActionListener(this); + //On associe au bouton Connexion des actions a realiser this.Connexion.addActionListener(this); this.Connexion.setSelected(false); + // On ajouter les differents elements au panel panel.add(pseudofield); panel.add(Text); panel.add(Connexion); panel.add(Cancel); + //ajouter un effet de bord transparent au composant Jlabel Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); } public void actionPerformed(ActionEvent event) { Object source = event.getSource(); + if(source == Connexion){ - // on recupere le texte entree dans la zone de saisie - String login = pseudofield.getText(); + // on recupere le texte entré dans la zone de saisie + String login = pseudofield.getText(); - boolean loginExiste = false; - boolean loginEstActif = false; - try { - loginExiste = Request.sendLogin(login, "loginExiste"); - } catch (IOException e1) { - System.out.println("Pb envoi requete au serveur"); - e1.printStackTrace(); - } - try { - loginEstActif = Request.sendLogin(login, "estActif"); - } catch (IOException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - - if(!loginExiste) { - if(!Connexion.isSelected()) { - JOptionPane.showMessageDialog(frame, "This login doesn't exist", "Error", JOptionPane.WARNING_MESSAGE) ; - Connexion.setSelected(true); - frame.dispose(); - new FenetreConnexion(); - } - }else if(loginEstActif){ - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); + boolean loginExiste = false; + boolean loginEstActif = false; + + //On vérifie si login existe déjà + try { + loginExiste = Request.sendLogin(login, "loginExiste"); + } catch (IOException e1) { + System.out.println("Pb envoi requete au serveur"); + e1.printStackTrace(); + } + + //On vérifie si le login est utilisé par un user actif + try { + loginEstActif = Request.sendLogin(login, "estActif"); + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); } - if(!Connexion.isSelected() && !FenetreMenu.ouvert) { - JOptionPane.showMessageDialog(frame, "This login is used by an active user", "Error", JOptionPane.WARNING_MESSAGE) ; - Connexion.setSelected(true); - frame.dispose(); - new FenetreConnexion(); - } - }else { - // On crée un objet de type ChatApp - Agent agent; - boolean connexion; - - try { - - agent = new Agent(Tools.getAdress()[0], App.portSrc, App.portDest, login); - String pseudo = agent.getDb().getPseudoFromLogin(login); - // on tente une connexion avec ce pseudo - connexion = agent.connectConnexion(pseudo, login); - // Dans les deux cas de figures (reussite ou echec) on affiche un pop-up pour expliquer la situation - if(connexion) { - // La connexion a reussi - JOptionPane.showMessageDialog(frame, "Bonjour " + pseudo) ; - frame.dispose(); - // on lance une nouvelle fenetre de type View_Menu - FenetreMenu fenetreCourante= new FenetreMenu(agent); - } - else { - // La connexion a echoue, il est possible de rentrer un nouveau pseudo - JOptionPane.showMessageDialog(frame, "Echec de Connexion , ce pseudo est deja pris !"); - } - } catch (IOException e) { - System.out.println("Création thread impossible"); - e.printStackTrace(); - } catch (InterruptedException e) { - System.out.println("connect impossible"); - e.printStackTrace(); - } - } + + //Le login n'existe pas + if(!loginExiste) { + + //Affichage d'un message d'erreur + if(!Connexion.isSelected()) { + JOptionPane.showMessageDialog(frame, "This login doesn't exist", "Error", JOptionPane.WARNING_MESSAGE) ; + Connexion.setSelected(true); + frame.dispose(); + new FenetreConnexion(); + } + + //Le login est utilisé par un user actif + }else if(loginEstActif){ + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + //Affichage d'un message d'erreur + if(!Connexion.isSelected() && !FenetreMenu.ouvert) { + JOptionPane.showMessageDialog(frame, "This login is used by an active user", "Error", JOptionPane.WARNING_MESSAGE) ; + Connexion.setSelected(true); + frame.dispose(); + new FenetreConnexion(); + } + + //Le login existe et n'est pas utilisé par un user actif + }else { + + Agent agent; + boolean connexion; + + try { + //Création d'un agent + agent = new Agent(Tools.getAdress()[0], App.portSrc, App.portDest, login); + + //Récupération du pseudo et tentative de connexion + String pseudo = agent.getDb().getPseudoFromLogin(login); + connexion = agent.connectConnexion(pseudo, login); + + // Dans les deux cas de figures (reussite ou echec) on affiche un pop-up pour expliquer la situation + if(connexion) { + + // La connexion a reussi + JOptionPane.showMessageDialog(frame, "Bonjour " + pseudo) ; + frame.dispose(); + + // on lance une nouvelle fenetre de type View_Menu + FenetreMenu fenetreCourante= new FenetreMenu(agent); + }else { + + // La connexion a echoue, il est possible de rentrer un nouveau pseudo + JOptionPane.showMessageDialog(frame, "Echec de Connexion , ce pseudo est deja pris !"); + } + + } catch (IOException e) { + System.out.println("Création thread impossible"); + e.printStackTrace(); + } catch (InterruptedException e) { + System.out.println("connect impossible"); + e.printStackTrace(); + } + } }else if(source == Cancel) { frame.dispose(); new FenetreInscription(); @@ -188,15 +221,15 @@ public class FenetreConnexion implements ActionListener { } private static void createAndShowGUI() { - // Etre certain d'avoir une joli fenetre + + // Etre certain d'avoir une jolie fenetre JFrame.setDefaultLookAndFeelDecorated(true); - // On crée une fentre d'acceuil + + // On crée une fenetre d'acceuil FenetreConnexion fenetre = new FenetreConnexion(); } public static void main(String[] args) { - //Schedule a job for the event-dispatching thread: - //creating and showing this application's GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); diff --git a/chatGitElise/src/gui/FenetreInscription.java b/chatGitElise/src/gui/FenetreInscription.java index 9d8540c..40a283f 100644 --- a/chatGitElise/src/gui/FenetreInscription.java +++ b/chatGitElise/src/gui/FenetreInscription.java @@ -10,7 +10,6 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; import javax.swing.BorderFactory; import javax.swing.JButton; @@ -22,8 +21,6 @@ import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.JOptionPane; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.io.File; import java.io.IOException; @@ -45,8 +42,8 @@ public class FenetreInscription implements ActionListener { * Cette fenetre sera munie d'un bouton de connexion et d'une zone de saisie de pseudo. */ public FenetreInscription() { + try { - //here you can put the selected theme class name in JTattoo UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel"); } catch (ClassNotFoundException ex) { @@ -58,15 +55,20 @@ public class FenetreInscription implements ActionListener { } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } + //creer une instance JFrame frame = new JFrame("Fenetre inscription"); + //sortir quand l’utilisateur ferme le frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // fixer les dimensions de la fenetre frame.setSize(new Dimension(40, 100)); + //Creer le JPanel panel = new JPanel(new GridLayout(7,1)); panel.setOpaque(false); + //Ajouter les elements this.addWidgets(); try { @@ -80,19 +82,24 @@ public class FenetreInscription implements ActionListener { throw new RuntimeException(e); } frame.getRootPane().setDefaultButton(inscription); + //Ajouter le panel a la window frame.getContentPane().add(panel, BorderLayout.CENTER); - //L'utilisateur ne pourra pas aggrandir la fenetre + + //L'utilisateur ne pourra pas agrandir la fenetre this.frame.setResizable(false); + //Afficher la fenetre frame.pack(); frame.setVisible(true); } private void addWidgets() { + // Créer Zone d'insertion de texte pour le pseudo this.loginfield = new JTextField(2); - this.pseudofield = new JTextField(2); + this.pseudofield = new JTextField(2); + // creation d'un label qui contiendra un txt au centre this.Text = new JLabel("Forbidden characters: space, '?','&', '/', '=' ", SwingConstants.CENTER); this.Text.setForeground(Color.WHITE); @@ -118,12 +125,15 @@ public class FenetreInscription implements ActionListener { JLabel text2 = new JLabel("Pseudo: ", SwingConstants.CENTER); text2.setForeground(Color.WHITE); text2.setOpaque(false); + //Ajout d'un bouton Connexion this.inscription = new JButton("Sign Up"); this.connexion = new JButton("Sign In"); + //On associe au bouton Connexion des actions a realiser this.inscription.addActionListener(this); this.connexion.addActionListener(this); + // On ajouter les differents elements au panel panel.add(text); panel.add(loginfield); @@ -132,6 +142,7 @@ public class FenetreInscription implements ActionListener { panel.add(Text); panel.add(inscription); panel.add(connexion); + //ajouter un effet de bord transparent au composant Jlabel Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); } @@ -139,34 +150,48 @@ public class FenetreInscription implements ActionListener { public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if(source == inscription) { - // on recupere le texte entree dans la zone de saisie + + // on recupere le login et le pseudo entrés dans la zone de saisie String login = loginfield.getText(); String pseudo = pseudofield.getText(); + + //Si le login ou le pseudo sont vides affichage message d'erreur if(login.isBlank()||pseudo.isBlank()) { JOptionPane.showMessageDialog(frame, "Please do not enter a blank pseudo or login") ; + + //Si le login existe déjà on affiche un message d'erreur }else if(DataBase.getInstance().loginExiste(login)){ JOptionPane.showMessageDialog(frame, "This login is already used"); + + //Les conditions sont réunies }else { - // On crée un objet de type ChatApp - Agent agent; - boolean connexion; + + Agent agent; + boolean connexion; try { + + //Création d'un agent agent = new Agent(Tools.getAdress()[0], App.portSrc, App.portDest); - // on tente une connexion avec ce pseudo + + // on tente une connexion avec le pseudo connexion = agent.connectInscription(pseudo, login); + // Dans les deux cas de figures (reussite ou echec) on affiche un pop-up pour expliquer la situation if(connexion) { + // La connexion a reussi JOptionPane.showMessageDialog(frame, "Bonjour " + pseudo) ; frame.dispose(); + // on lance une nouvelle fenetre de type View_Menu FenetreMenu fenetreCourante= new FenetreMenu(agent); - } - else { + }else { + // La connexion a echoue, il est possible de rentrer un nouveau pseudo JOptionPane.showMessageDialog(frame, "Echec de Connexion , ce pseudo est deja pris !"); } + } catch (IOException e) { System.out.println("Création thread impossible"); e.printStackTrace(); @@ -175,6 +200,7 @@ public class FenetreInscription implements ActionListener { e.printStackTrace(); } } + }else if(source == connexion){ frame.dispose(); FenetreConnexion fenetreCo = new FenetreConnexion(); @@ -183,15 +209,16 @@ public class FenetreInscription implements ActionListener { public static void createAndShowGUI() { + // Etre certain d'avoir une joli fenetre - JFrame.setDefaultLookAndFeelDecorated(true); - // On crée une fentre d'acceuil - FenetreInscription fenetre = new FenetreInscription(); + JFrame.setDefaultLookAndFeelDecorated(true); + + // On crée une fentre d'acceuil + FenetreInscription fenetre = new FenetreInscription(); } public static void main(String[] args) { - //Schedule a job for the event-dispatching thread: - //creating and showing this application's GUI. + javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); diff --git a/chatGitElise/src/gui/FenetreMenu.java b/chatGitElise/src/gui/FenetreMenu.java index 0d72b57..3a0e776 100644 --- a/chatGitElise/src/gui/FenetreMenu.java +++ b/chatGitElise/src/gui/FenetreMenu.java @@ -7,8 +7,6 @@ import java.awt.Font; import java.awt.Graphics; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; -import java.awt.GridLayout; -import java.awt.HeadlessException; import java.awt.Image; import java.awt.Insets; import java.awt.SystemColor; @@ -16,13 +14,11 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; -import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; import java.util.Vector; import javax.swing.ImageIcon; -import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; @@ -33,15 +29,14 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; -import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.UIManager; import controller.Agent; -import model.Contact; import server.Request; public class FenetreMenu { + JFrame frame; JPanel panel; JMenuBar menu; @@ -59,7 +54,6 @@ public class FenetreMenu { FenetreMenu.ouvert=true; this.agent = agent; try { - //here you can put the selected theme class name in JTattoo UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel"); } catch (ClassNotFoundException ex) { @@ -71,13 +65,14 @@ public class FenetreMenu { } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } + frame = new JFrame("Fenêtre menu"); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); - frame.setSize(new Dimension(600, 800)); - frame.setResizable(false); + frame.setSize(new Dimension(600, 800)); + frame.setResizable(false); - wa = new WindowAdapter(){ + wa = new WindowAdapter(){ public void windowClosing(WindowEvent e){ int reponse = fenetreFermeture(); if (reponse==0){ @@ -95,10 +90,12 @@ public class FenetreMenu { frame.addWindowListener(wa); menu = new JMenuBar(); + //Creation d'un JPanel panel = new JPanel(new GridBagLayout()); panel.setForeground(SystemColor.menuText); panel.setOpaque(false); + // Ajouter tout les elements a la fenetre this.addWidgets(); @@ -112,8 +109,10 @@ public class FenetreMenu { } catch (IOException e) { throw new RuntimeException(e); } + // ajouter le panel a la fenetre frame.getContentPane().add(panel, BorderLayout.CENTER); + // Afficher la fenetre frame.pack(); frame.setVisible(true); @@ -128,6 +127,7 @@ public class FenetreMenu { } private void addWidgets() throws IOException { + jlabel = new JLabel(new ImageIcon("panda.png"), JLabel.CENTER); jlabel.setOpaque(false); texte = new JLabel(); @@ -148,15 +148,13 @@ public class FenetreMenu { contenu.setBackground(c.darker()); contenu.setHorizontalAlignment(SwingConstants.CENTER); - //JMenuItem usersActifs = new JMenuItem("Active users"); JMenuItem modifierPseudo = new JMenuItem("Modify your pseudo"); modifierPseudo.setBackground(c.darker()); modifierPseudo.setForeground(Color.WHITE); JMenuItem deco = new JMenuItem("Deconnection"); deco.setBackground(c.darker()); deco.setForeground(Color.WHITE); - - //contenu.add(usersActifs); + contenu.add(modifierPseudo); contenu.add(deco); @@ -172,7 +170,6 @@ public class FenetreMenu { String users = Request.actifs("actifs"); String users2 = users.replaceAll("\\s", "\n"); - //String users = agent.getList().actifUsers(); Vector v = new Vector(); for(String pseudo : users2.split("\n")) { v.add(pseudo); @@ -251,7 +248,6 @@ public class FenetreMenu { } } }); - //panel.add(BorderLayout.NORTH, menu); diff --git a/chatGitElise/src/gui/FenetreModifPseudo.java b/chatGitElise/src/gui/FenetreModifPseudo.java index 59ba8fc..c1581f0 100644 --- a/chatGitElise/src/gui/FenetreModifPseudo.java +++ b/chatGitElise/src/gui/FenetreModifPseudo.java @@ -21,6 +21,7 @@ import java.io.IOException; import controller.*; public class FenetreModifPseudo implements ActionListener { + JFrame frame; JPanel panel; JTextField pseudofield; @@ -34,45 +35,61 @@ public class FenetreModifPseudo implements ActionListener { * Cette fenetre sera munie d'un bouton de connexion et d'une zone de saisie de pseudo. */ public FenetreModifPseudo(Agent agent) { + this.agent = agent; + //creer une instance JFrame frame = new JFrame("Modification pseudo"); + //sortir quand l’utilisateur ferme le frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // fixer les dimensions de la fenetre frame.setSize(new Dimension(120, 40)); + //Creer le JPanel panel = new JPanel(new GridLayout(4,1)); + //Ajouter les elements this.addWidgets(); + //Set the default button. frame.getRootPane().setDefaultButton(ok); + //Ajouter le panel a la window frame.getContentPane().add(panel, BorderLayout.CENTER); + //L'utilisateur ne pourra pas aggrandir la fenetre this.frame.setResizable(false); + //Afficher la fenetre frame.pack(); frame.setVisible(true); } private void addWidgets() { + // Créer Zone d'insertion de texte pour le pseudo this.pseudofield = new JTextField(2); + // creation d'un label qui contiendra un txt au centre this.Text = new JLabel("Type your new pseudo", SwingConstants.CENTER); + //Ajout d'un bouton Connexion this.ok = new JButton("Continue"); this.Cancel = new JButton("Cancel"); this.ok.addActionListener(this); this.Cancel.addActionListener(this); + //On associe au bouton Connexion des actions a realiser this.ok.addActionListener(this); - // On ajouter les differents elements au panel + + // On ajoute les differents elements au panel panel.add(pseudofield); panel.add(Text); panel.add(ok); panel.add(Cancel); + //ajouter un effet de bord transparent au composant Jlabel Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); } @@ -80,20 +97,30 @@ public class FenetreModifPseudo implements ActionListener { public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if(source == ok){ + + //Récupération du nouveau pseudo String newPseudo = pseudofield.getText(); - try { + try { + + //Si le nouveau pseudo est acceptable if(agent.changerPseudo(newPseudo)) { + + //Affichage message JOptionPane.showMessageDialog(frame, "Your new pseudo is "+newPseudo); frame.dispose(); new FenetreMenu(agent); + + //Sinon affichage message erreur }else { JOptionPane.showMessageDialog(frame, "Pseudo already use, choose another one"); } + } catch (HeadlessException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); }; + }else if(source == Cancel) { frame.dispose(); try { diff --git a/chatGitElise/src/model/Contact.java b/chatGitElise/src/model/Contact.java index 9e7ce0d..1626a36 100644 --- a/chatGitElise/src/model/Contact.java +++ b/chatGitElise/src/model/Contact.java @@ -1,6 +1,5 @@ package model; -import java.io.*; import java.net.InetAddress; public class Contact { diff --git a/chatGitElise/src/model/ListeContacts.java b/chatGitElise/src/model/ListeContacts.java index 36fd612..7734bbd 100644 --- a/chatGitElise/src/model/ListeContacts.java +++ b/chatGitElise/src/model/ListeContacts.java @@ -1,15 +1,11 @@ package model; -import network.*; -import java.net.InetAddress; import java.util.ArrayList; public class ListeContacts { - private static Contact user; + private ArrayList listeContact; - - - //la liste doit être un singleton + private static final ListeContacts instance = new ListeContacts(); @@ -21,10 +17,6 @@ public class ListeContacts { return instance; } - public static void createUser(String pseudo, int port) { - user = new Contact(pseudo, Tools.getLocalIp(), port); - } - public boolean contactExist(Contact contact) { for(Contact c : listeContact) { if(c.getPseudo().equals(contact.getPseudo())){ diff --git a/chatGitElise/src/model/Message.java b/chatGitElise/src/model/Message.java index 8133951..5cbbdb5 100644 --- a/chatGitElise/src/model/Message.java +++ b/chatGitElise/src/model/Message.java @@ -5,6 +5,8 @@ import java.net.*; public class Message implements Serializable{ + private static final long serialVersionUID = 1L; + protected InetAddress addressSrc; protected InetAddress addressDest; protected int portSrc; diff --git a/chatGitElise/src/model/MessageChat.java b/chatGitElise/src/model/MessageChat.java index 075fc6e..b3cd4db 100644 --- a/chatGitElise/src/model/MessageChat.java +++ b/chatGitElise/src/model/MessageChat.java @@ -7,6 +7,8 @@ import java.util.Date; public class MessageChat extends Message{ + private static final long serialVersionUID = 1L; + private String message; private Date date; diff --git a/chatGitElise/src/model/MessagePseudo.java b/chatGitElise/src/model/MessagePseudo.java index bd32491..0af5e26 100644 --- a/chatGitElise/src/model/MessagePseudo.java +++ b/chatGitElise/src/model/MessagePseudo.java @@ -3,6 +3,8 @@ package model; import java.net.InetAddress; public class MessagePseudo extends Message{ + + private static final long serialVersionUID = 1L; private String pseudo; private int id; diff --git a/chatGitElise/src/network/TCPChat.java b/chatGitElise/src/network/TCPChat.java index 41c4960..bfb6483 100644 --- a/chatGitElise/src/network/TCPChat.java +++ b/chatGitElise/src/network/TCPChat.java @@ -10,7 +10,6 @@ import java.net.InetAddress; import java.net.Socket; import java.util.ArrayList; -import controller.Agent; import model.Contact; import model.MessageChat; @@ -56,23 +55,20 @@ public class TCPChat extends Thread{ public void run() { BufferedReader in; try { + in = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); - while(true) { + while(true) { + try { String input = in.readLine(); MessageChat msgRecu = new MessageChat(this.socket.getInetAddress(), this.socket.getLocalAddress(), this.socket.getPort(), this.socket.getLocalPort(), 0, input); listeMessagesRecu.add(msgRecu); - //System.out.println("fire msg tcp recu"); this.support.firePropertyChange("Msg TCP Recu", true, false); - //if (!msgRecu.getMessage().equals(null)) { - //System.out.println("Message reçu : "+msgRecu.getMessage() ); - //} } catch (IOException e) { this.support.firePropertyChange("deconnexion",true,false); System.out.println("Création et read du in impossible"); break; - //e.printStackTrace(); } } @@ -85,7 +81,6 @@ public class TCPChat extends Thread{ public void sendMsg(String message) throws IOException { PrintWriter out = new PrintWriter(this.socket.getOutputStream(),true); out.println(message); - //System.out.println("Message envoyé : "+message); } diff --git a/chatGitElise/src/network/TCPServer.java b/chatGitElise/src/network/TCPServer.java index 3fe7a10..6ca7a5e 100644 --- a/chatGitElise/src/network/TCPServer.java +++ b/chatGitElise/src/network/TCPServer.java @@ -1,6 +1,5 @@ package network; -import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.IOException; @@ -18,9 +17,9 @@ public class TCPServer extends Thread{ private PropertyChangeSupport support; public TCPServer(int port, InetAddress address) throws IOException { + this.port = port; this.socket = new ServerSocket(port, 1000, address); this.address = address; - this.port = port; this.listeConnexions = new ArrayList(); this.support = new PropertyChangeSupport(this); this.start(); @@ -39,7 +38,6 @@ public class TCPServer extends Thread{ TCPChat tcpChat = new TCPChat(link); this.listeConnexions.add(tcpChat); this.support.firePropertyChange("session chat demarree", true, false); - //link.close();// A APPELER QUELQUE PART D'AUTRE } catch (IOException e) { System.out.println("Socket non créé ou non fermé"); e.printStackTrace(); diff --git a/chatGitElise/src/network/Tools.java b/chatGitElise/src/network/Tools.java index d2acd4c..0f1ec50 100644 --- a/chatGitElise/src/network/Tools.java +++ b/chatGitElise/src/network/Tools.java @@ -1,4 +1,5 @@ package network; + import java.net.*; import java.util.Enumeration; @@ -18,7 +19,9 @@ public class Tools { } - //Renvoie un tableau d'InetAdress le premier élement est l'adresse locale de la machine le deuxieme l'adresse de broadcast + //Renvoie un tableau d'InetAdress + //le premier élement est l'adresse locale de la machine + //le deuxieme l'adresse de broadcast public static InetAddress[] getAdress() { Enumeration interfaces = null; InetAddress localAdress = null; diff --git a/chatGitElise/src/network/UDPInput.java b/chatGitElise/src/network/UDPInput.java index 3490f1f..27fefff 100644 --- a/chatGitElise/src/network/UDPInput.java +++ b/chatGitElise/src/network/UDPInput.java @@ -12,6 +12,7 @@ import java.util.ArrayList; public class UDPInput extends Thread{ + private DatagramSocket socket; private ArrayList messageReceived; private PropertyChangeSupport support; @@ -48,19 +49,14 @@ public class UDPInput extends Thread{ System.out.println("Packet UDP non reçu\n"); e.printStackTrace(); } - /* Charset charset = StandardCharsets.US_ASCII; - String pseudo = charset.decode(ByteBuffer.wrap(inPacket.getData())).toString(); - MessagePseudo msg = new MessagePseudo(null, null, 0, 0, 0, ""); - msg.setPseudo(pseudo);*/ ByteArrayInputStream byteInStream = new ByteArrayInputStream(inPacket.getData()); ObjectInputStream objectInStream; try { objectInStream = new ObjectInputStream(byteInStream); MessagePseudo msg = (MessagePseudo) objectInStream.readObject(); messageReceived.add(msg); - System.out.println("fire property change"); this.support.firePropertyChange("Msg UDP Recu", this.messageReceived.size() -1, this.messageReceived.size()); - System.out.println("Message reçu, pseudo = "+msg.getPseudo()+" et num port = "+msg.getPortSrc()+"\n"); + } catch (IOException e) { System.out.println("Objet pas créé"); e.printStackTrace(); diff --git a/chatGitElise/src/network/UDPOutput.java b/chatGitElise/src/network/UDPOutput.java index 80d8ad5..12cf645 100644 --- a/chatGitElise/src/network/UDPOutput.java +++ b/chatGitElise/src/network/UDPOutput.java @@ -1,4 +1,5 @@ package network; + import model.*; import java.io.ByteArrayOutputStream; @@ -6,10 +7,8 @@ import java.io.IOException; import java.io.ObjectOutputStream; import java.net.*; - - - public class UDPOutput { + private Contact user; private DatagramSocket socket; private int port; @@ -23,32 +22,21 @@ public class UDPOutput { public void send(MessagePseudo msg, InetAddress addressDest, int portSrc) throws IOException { + byte[] buffer = "".getBytes(); ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); - ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream); - objectOutStream.writeObject(msg); - objectOutStream.close(); - buffer = byteOutStream.toByteArray(); - DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.getAddressDest(), msg.getPortDest()); - this.socket.send(packet); - System.out.println("Message envoyé, pseudo = "+msg.getPseudo()+" et num port destination = "+portSrc+"\n"); + ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream); + objectOutStream.writeObject(msg); + objectOutStream.close(); + buffer = byteOutStream.toByteArray(); + DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.getAddressDest(), msg.getPortDest()); + this.socket.send(packet); } public DatagramSocket getSocket() { return this.socket; } - /*public void send(MessageChangePseudo msg, InetAddress addressDest, int portSrc) throws IOException { - byte[] buffer = "".getBytes(); - ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); - ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream); - objectOutStream.writeObject(msg); - objectOutStream.close(); - buffer = byteOutStream.toByteArray(); - DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.getAddressDest(),msg.getPortDest()); - this.socket.send(packet); - System.out.println("Message envoyé, pseudo = "+msg.getPseudo()+" et num port destination = "+portSrc+"\n"); - }*/ }