From 6aa087f1bc14e806b5d0f39efe6f48d302601f09 Mon Sep 17 00:00:00 2001 From: Nabzzz Date: Sun, 20 Dec 2020 13:24:50 +0100 Subject: [PATCH] gestion des fenetres de clavardage --- Implementation/src/Controller/ChatApp.class | Bin 0 -> 6106 bytes .../src/Controller/Historique.class | Bin 0 -> 2006 bytes .../src/Controller/ListUtilisateurs.class | Bin 0 -> 3187 bytes .../src/Controller/MessageHorodate.class | Bin 0 -> 3377 bytes .../src/Controller/Utilisateur.class | Bin 0 -> 2623 bytes .../src/Protocoles/RunnerEcouteTCP.class | Bin 0 -> 1719 bytes .../src/Protocoles/RunnerEcouteUDP.class | Bin 0 -> 448 bytes .../src/Protocoles/RunnerTCPEcoute.class | Bin 0 -> 4324 bytes .../src/Protocoles/RunnerTCPEnvoi.class | Bin 0 -> 2804 bytes Implementation/src/Protocoles/RunnerUDP.class | Bin 0 -> 4024 bytes .../src/Protocoles/SessionClavardage.class | Bin 0 -> 4583 bytes .../src/Protocoles/SessionClavardage.java | 166 +++++++++++++++ .../src/Protocoles/TCPEchange.class | Bin 0 -> 2323 bytes .../src/Protocoles/UDPEchange.class | Bin 0 -> 5788 bytes Implementation/src/View/ViewSession.java | 189 ++++++++++++++++++ 15 files changed, 355 insertions(+) create mode 100644 Implementation/src/Controller/ChatApp.class create mode 100644 Implementation/src/Controller/Historique.class create mode 100644 Implementation/src/Controller/ListUtilisateurs.class create mode 100644 Implementation/src/Controller/MessageHorodate.class create mode 100644 Implementation/src/Controller/Utilisateur.class create mode 100644 Implementation/src/Protocoles/RunnerEcouteTCP.class create mode 100644 Implementation/src/Protocoles/RunnerEcouteUDP.class create mode 100644 Implementation/src/Protocoles/RunnerTCPEcoute.class create mode 100644 Implementation/src/Protocoles/RunnerTCPEnvoi.class create mode 100644 Implementation/src/Protocoles/RunnerUDP.class create mode 100644 Implementation/src/Protocoles/SessionClavardage.class create mode 100644 Implementation/src/Protocoles/SessionClavardage.java create mode 100644 Implementation/src/Protocoles/TCPEchange.class create mode 100644 Implementation/src/Protocoles/UDPEchange.class create mode 100644 Implementation/src/View/ViewSession.java diff --git a/Implementation/src/Controller/ChatApp.class b/Implementation/src/Controller/ChatApp.class new file mode 100644 index 0000000000000000000000000000000000000000..7f8dc3b3273c26159f5e430e6ff067bd98d7328e GIT binary patch literal 6106 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 literal 0 HcmV?d00001 diff --git a/Implementation/src/Controller/Historique.class b/Implementation/src/Controller/Historique.class new file mode 100644 index 0000000000000000000000000000000000000000..ded444cf6f636ec725a68ebdd74848990a8ff965 GIT binary patch literal 2006 zcmaJ?TT>iG6#kk81}4Kr$c?KLLx5cp7BB?D5Ht`G;zH2nVu-h9rvnpaXV#hCRN=Ef z!e@Q(RV~?6VU=b1Wcibdlf4%rCmEXO9nX;q42jX?b}L%YszEn!2?j$?806ARz9$3Ubw!X~aYE?_ z&eui3(6kkbV3MIfQzx_~9oGrD6ve<&cwK zQ1X`zT)|a_u8Or4Kk#irWVn(!N7Yig*A4Wbm%`w-O>(1=U{$DAa<>)z7|<|i;BA;S z*~lJ+Qshb7FH%loD~_Mu2pmslWgvLoYQZ}U6OTlmlh6CYw1w%8@aNB++<|%)cpx3& zM(l$(nbI+YTN;K9j9~OM^jc&Ft)T3P335IKVekiC`IWBh`c|cSsxhF#fxtgrXMhvPTrwqJ{yM(nbRMfR{QG-|-?lBD3 z)p$*WA;o-J7ah}>HK^a_7+MJ{>lcF@`8YV5yr?^L%;SNE1q1KleTLpTBUOzQ!ES`2 zX!{J83AWP6Z{nH8qJbraq>~S^i(O#&K&5DzVYa#{VzskC=U|ihth4WNSqvzunMkL$ zedp@~txJ)$U@=&u^-@(aS{HpwZd2ixe4EU7WE@Yd7xQ}}*yMXIadc|=*c`*nGdAiy zQCKaMAvM5LG-pu@(=boiBJdm$P|vhwCC?qM@xrNzsHDq|ve!|W%yCr*nxsYFm!S-J zVNJ*b-wr#Pv87`hI~qP!*?-C~R4JL`z4Q-7Ix0cbv&%e3tL2E{yXqpvf)VHn_iR^$ zLmA&cEEcS@m8;^^C~h7V#5v;6s^sHludaOzvBX_B>qtT4|BS|e)isYyZj!e}K|3)o zJZUmhL{wgDyEpX;EH!ovEp_`C zZK>bT`ScaKj?w)yeP#HF&a0#cTqlGcw4xX7=p(A1zGko%;|-Ht<%gd772RVcT-&MW ztN#)(Ou8c^y^gt9XMk=-Uz$j#?I$84bIoODn$9Osv~u@Pa#lIv|AM}*8ztPNTUjb0 zd4f9taXR(+nA55MfJ-qwpLo#U_dV{bXMYKke_*c;et+)evdsx5*Nw*>K8k6ib k82g7r68N|b_X)Cew-fLtMYmf%Kf@Qq)9L*sICALuA1hY~asU7T literal 0 HcmV?d00001 diff --git a/Implementation/src/Controller/ListUtilisateurs.class b/Implementation/src/Controller/ListUtilisateurs.class new file mode 100644 index 0000000000000000000000000000000000000000..ab3efcf705c2e4104bf84bf19c3f67e8062fb0af GIT binary patch literal 3187 zcma)8Yf}_Q6g>^Avn-=1K9Fd1BpP867ekDX6%!F@cBfOPCNIj25?FoIaUFF`puW9h+(2AlL&>P9oLs8U_wD&X zCr}9(sBb_cOap67tVNT+j=;~P`aM_qUM?s7l(sv|Q%+zjS@Z*egq=~&)Y(Aln@xi? z{H7CFk7ffKOl-s^fqRzutnw$&FfG+cAd6W~U}Jkn=&zK_sPY|mn$8;0Vqyzg1)Aoh z?@T$;KkGUfM@fM_?RTH3c5>YFa?*C`Wh=HBxYxvX>=0OA;ViNcFegLXaXVL}XHs`w zGqlr08}8%1oy{`g>UbgD>CkSsiTklfAWmGqtvp{~b2*<9?*q|(x)B{n8t62!S7T|e zP*^q*FlOvvSYA=ucAtq9x&>k`HaIcH&A#7L?<;aXcch zbJ(+jVrIrFQY+SFN6lDj#tE!}5sOr6{|WTsxK?rhGGe3BcZ}<@oiK3{kCBo&U6@l- zn%DESYrGx_|m`=W)Tn(8i2eNbhw;if^ymBYpSr1Zz^$sBjqj4C@bJ7gEi z_lpxQ+Bs~6LbbMJaQqwC4o@0BlIZ5G~pje_Wlzl|%XRX4EVC8F|vtENs%Qs@r6ro*--w&RZ2I-!2SEHREN2rqy^m zfp_q(f%kOn-xt_bna++o=grDgShr9PCn+V*pBMPDn#jm7bo#jMW^*#wHRyS>#X|aS z>{UBU4vx(iWDWBRRrckfU$qsv=(lsZQBHsM^oMMEArfSEz;&hHpRu4D5EUilj5Z@{}cC^T@*uLNF;-04O=SHQaDb%^8*80W5| z;RhtXEuEd?buBG)cgEz^-2yf*;GU~6liwr34QoPssYAuf z2723w7QVVK^9duj(9splNA9L+9OHv7?O*}BhW7r1c7dz7my0fe->`nTi-G8S|5dE& z`sUi5zr;6-F*Y+Vz~T#{jW6E&(2m{cQu#IgX!v9G zKjP7$2+MF+M8JM7LIRG&T4RLrc!}v2ZPyxGz>^cP(y;{$Ph7k6`(8f%3XR|4bo0al z&Q;2gWFhqz<0>4XM2-??FAm}uR}Z6)e~;ogoSy+~J2#UWcm-w~;&eZZZG6+V<21iy z&hYzWlt9M`a)NLFr_cuT*tQTXKO&;guScPKb-`v> zu;z<{%TcsdP|%7vaWf4pH@K>R$K5 sTGZXf1_KYUu(z;>J@7hr>+lBN?& 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 literal 0 HcmV?d00001 diff --git a/Implementation/src/Protocoles/RunnerTCPEcoute.class b/Implementation/src/Protocoles/RunnerTCPEcoute.class new file mode 100644 index 0000000000000000000000000000000000000000..72aef14068e67791d5241ec157a0f338696f03fa GIT binary patch literal 4324 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 MO#a7oF2V8t0H&7wzW@LL literal 0 HcmV?d00001 diff --git a/Implementation/src/Protocoles/RunnerUDP.class b/Implementation/src/Protocoles/RunnerUDP.class new file mode 100644 index 0000000000000000000000000000000000000000..8708f026ea84279cd05262b1e962f963a264d57b GIT binary patch literal 4024 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 literal 0 HcmV?d00001 diff --git a/Implementation/src/Protocoles/SessionClavardage.class b/Implementation/src/Protocoles/SessionClavardage.class new file mode 100644 index 0000000000000000000000000000000000000000..b86f313138aec4e657a7b338e7fb716f13d9a4d2 GIT binary patch literal 4583 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 literal 0 HcmV?d00001 diff --git a/Implementation/src/Protocoles/SessionClavardage.java b/Implementation/src/Protocoles/SessionClavardage.java new file mode 100644 index 0000000..757ad6c --- /dev/null +++ b/Implementation/src/Protocoles/SessionClavardage.java @@ -0,0 +1,166 @@ +package src.Protocoles; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.OutputStream; +import java.net.Socket; +import java.util.ArrayList; + +import src.Controller.ChatApp; +import src.Controller.MessageHorodate; +import src.Controller.Utilisateur; + +public class SessionClavardage extends Thread { + private Socket link; + private ChatApp app; + private Utilisateur u2; + private ObjectOutputStream out; + private ObjectInputStream in; + private PropertyChangeSupport pcs; + private ArrayList derniersMsg; // on met temporairement les derniers msgs pour éviter les pb de synchro inter-threads + + public SessionClavardage(Socket link, ChatApp app) { + this.setLink(link); + this.setApp(app); + try { + this.setU2(app.getActifUsers().getIPList(link.getInetAddress())); + this.setOut(new ObjectOutputStream(link.getOutputStream())); + this.setIn(new ObjectInputStream(link.getInputStream())); + }catch(Exception e) { + e.getStackTrace(); + } + this.derniersMsg = new ArrayList(); + this.pcs = new PropertyChangeSupport(this); + this.start(); + } + + public SessionClavardage(Utilisateur u2, ChatApp app) { + this.setU2(u2); + this.setApp(app); + try { + Socket s = new Socket(u2.getIp(),5000); + this.setOut(new ObjectOutputStream(s.getOutputStream())); + this.setIn(new ObjectInputStream(s.getInputStream())); + this.setLink(s); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + this.derniersMsg = new ArrayList(); + this.pcs = new PropertyChangeSupport(this); + this.start(); + } + + + public void addPropertyChangeListener(PropertyChangeListener pcl){ + this.pcs.addPropertyChangeListener("MessageRecu",pcl); + this.pcs.addPropertyChangeListener("FinDeLaSession",pcl); + } + + public void arretSession() { + MessageHorodate msgh = new MessageHorodate(getU2(),getApp().getMe(),".",2); + try { + getOut().writeObject(msgh); + } catch (IOException e) { + e.printStackTrace(); + } + finally { + try { + link.close(); + } catch (IOException e) { + + } + } + } + public void envoiMsg(String msg) { + MessageHorodate msgh = new MessageHorodate(getU2(),getApp().getMe(),msg,1); + try { + getOut().writeObject(msgh); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + public MessageHorodate getDernierMsg() { + return this.derniersMsg.get(0); + } + + + + public void run() { + MessageHorodate msg = null; + while(true) { + try { + msg = (MessageHorodate) getIn().readObject(); + + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + pcs.firePropertyChange("FinDeLaSession", false, true); + break; + } + if(msg.getType() == 2) { + pcs.firePropertyChange("FinDeLaSession", false, true); + try { + link.close(); + } catch (IOException e) { + break; + } + break; + } + derniersMsg.add(msg); + pcs.firePropertyChange("MessageRecu",false,true); + + } + } + + public ObjectOutputStream getOut() { + return out; + } + + public void setOut(ObjectOutputStream out) { + this.out = out; + } + + public ObjectInputStream getIn() { + return in; + } + + public void setIn(ObjectInputStream in) { + this.in = in; + } + + public Socket getLink() { + return link; + } + + public void setLink(Socket link) { + this.link = link; + } + + public ChatApp getApp() { + return app; + } + + public void setApp(ChatApp app) { + this.app = app; + } + + public Utilisateur getU2() { + return u2; + } + + public void setU2(Utilisateur u2) { + this.u2 = u2; + } + + + + + +} diff --git a/Implementation/src/Protocoles/TCPEchange.class b/Implementation/src/Protocoles/TCPEchange.class new file mode 100644 index 0000000000000000000000000000000000000000..e419fcfbe05565c0e7172b40ebeb0b5b65dcdd7e GIT binary patch literal 2323 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 D@kki3 literal 0 HcmV?d00001 diff --git a/Implementation/src/View/ViewSession.java b/Implementation/src/View/ViewSession.java new file mode 100644 index 0000000..1a7077b --- /dev/null +++ b/Implementation/src/View/ViewSession.java @@ -0,0 +1,189 @@ +package src.View; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.io.IOException; + +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.SwingConstants; + +import src.Controller.*; +import src.Protocoles.SessionClavardage; + +import java.awt.GridBagLayout; +import java.awt.Font; +import java.awt.Color; +import java.awt.GridBagConstraints; +import java.awt.Insets; + +/* + * Classe representant la fenetre pour chaque session de clavardage. + */ +public class ViewSession implements PropertyChangeListener{ + JFrame frame ; + ChatApp app; + Utilisateur destination ; // Celui avec qui on va discuter + Utilisateur source; //Nous + SessionClavardage session; + WindowAdapter wa ; + JPanel panel ; + JTextArea textAreaAffichage ; + + /* + * Constructeur d'une fenetre de session de clavardage. + * @param app Un objet de type ChatApp pour posseder toutes les informations de l'utilisateur + * @param User2 L'utilisateur avec qui l'on souhaite discuter et passer en parametre sous forme de String + */ + public ViewSession(SessionClavardage session) { + this.session = session; + + this.app = session.getApp() ; + this.frame = new JFrame("ChatApp-AL-NM"); + this.source = this.app.getMe(); + this.destination = session.getU2(); + this.frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + // fixer les dimensions de la fenetre + this.frame.setSize(new Dimension(394, 344)); + this.frame.setResizable(false); + wa = new WindowAdapter(){ + public void windowClosing(WindowEvent e){ + int reponse = View_Menu.showConfirmDialog(); + if (reponse==0){ + session.arretSession(); + frame.dispose(); + + } + }}; + addWidgets(); + frame.addWindowListener( wa ) ; + frame.setVisible(true); + session.addPropertyChangeListener(this); + } + + /** + * Creer et ajouter les outils de la fenetre + */ + public void propertyChange(PropertyChangeEvent pce) { + switch(pce.getPropertyName()) { + case "MessageRecu": + MessageHorodate msgh = session.getDernierMsg(); + textAreaAffichage.append(msgh.getMessage()); + case "FinDeLaSession": + frame.dispose(); + } + } + private void addWidgets() { + GridBagLayout gridBagLayout = new GridBagLayout(); + gridBagLayout.columnWidths = new int[]{394, 0}; + gridBagLayout.rowHeights = new int[]{16, 220, 74, 0}; + gridBagLayout.columnWeights = new double[]{0.0, Double.MIN_VALUE}; + gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE}; + this.frame.getContentPane().setLayout(gridBagLayout); + this.panel = new JPanel(); + // Zone pour ecrire de nouveau message + JTextArea textAreaSaisie = new JTextArea(5,3); + textAreaSaisie.setLineWrap(true); + textAreaSaisie.setForeground(Color.LIGHT_GRAY); + textAreaSaisie.setFont(new Font("Lucida Grande", Font.ITALIC, 11)); + textAreaSaisie.setText("Entrer du texte ici !!!"); + JScrollPane scrollPane = new JScrollPane(textAreaSaisie); + // Creation d'un bouton envoye + JButton send = new JButton("Envoye"); + frame.getRootPane().setDefaultButton(send); + //****************************************************************************************************************** + //**************************************** GERER LES ECHANGES ENTRE UTILISATEURS *********************************** + //****************************************************************************************************************** + send.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent event) { + //UTILISER TCPENVOI + String AEnvoyer = textAreaSaisie.getText(); + textAreaAffichage.append(AEnvoyer); + session.envoiMsg(AEnvoyer); + textAreaSaisie.setText(""); + }}); + // Creation d'un bouton vider la zone de saisie de texte + JButton reset = new JButton("Vider"); + reset.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent event) { + textAreaSaisie.setText(""); + }}); + JLabel titre = new JLabel("Chat avec "+ this.destination.getPseudo(),SwingConstants.CENTER); + GridBagConstraints gbc_titre = new GridBagConstraints(); + gbc_titre.anchor = GridBagConstraints.NORTH; + gbc_titre.fill = GridBagConstraints.HORIZONTAL; + gbc_titre.insets = new Insets(0, 0, 5, 0); + gbc_titre.gridx = 0; + gbc_titre.gridy = 0; + frame.getContentPane().add(titre, gbc_titre); + // Zone d'affichage de l'historique + this.textAreaAffichage = new JTextArea(10,5); + textAreaAffichage.setLineWrap(true); + this.textAreaAffichage.setText(""); + JScrollPane scrollPaneAffichage = new JScrollPane(this.textAreaAffichage); + this.textAreaAffichage.setEditable(false); // il sert juste a afficher + GridBagConstraints gbc_textAreaAffichage = new GridBagConstraints(); + gbc_textAreaAffichage.fill = GridBagConstraints.BOTH; + gbc_textAreaAffichage.insets = new Insets(0, 0, 5, 0); + gbc_textAreaAffichage.gridx = 0; + gbc_textAreaAffichage.gridy = 1; + frame.getContentPane().add(scrollPaneAffichage, gbc_textAreaAffichage); + panel.add(BorderLayout.CENTER, scrollPane); + panel.add(BorderLayout.SOUTH,send); + panel.add(BorderLayout.SOUTH,reset); + panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); + //Add the panel to the window. + GridBagConstraints gbc_panel = new GridBagConstraints(); + gbc_panel.anchor = GridBagConstraints.NORTH; + gbc_panel.fill = GridBagConstraints.HORIZONTAL; + gbc_panel.gridx = 0; + gbc_panel.gridy = 2; + frame.getContentPane().add(panel, gbc_panel); + /* + * + *JTextArea textAreaAffichage = new JTextArea(10,5); + textAreaAffichage.setEditable(false); + JTextArea textAreaSaisie = new JTextArea(10,5); + textAreaSaisie.setForeground(Color.LIGHT_GRAY); + textAreaSaisie.setFont(new Font("Lucida Grande", Font.ITALIC, 11)); + textAreaSaisie.setText("Entrer du texte ici !!!"); + JScrollPane scrollPane = new JScrollPane(textAreaSaisie); + JButton send = new JButton("Envoye"); + frame.getRootPane().setDefaultButton(send); + send.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent event) { + //UTILISER TCPENVOI + textAreaSaisie.setText(""); + }}); + JButton reset = new JButton("Vider"); + reset.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent event) { + textAreaSaisie.setText(""); + }}); + JLabel titre = new JLabel("Chat avec "+ this.destination.getPseudo(),SwingConstants.CENTER); + panel.add(BorderLayout.CENTER, scrollPane); + //panel.add(scrollPane); + panel.add(BorderLayout.SOUTH,send); + panel.add(BorderLayout.SOUTH,reset); + panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); + //Add the panel to the window. + frame.getContentPane().add(BorderLayout.SOUTH, panel); + frame.getContentPane().add(BorderLayout.CENTER, textAreaAffichage); + frame.getContentPane().add(BorderLayout.NORTH, titre); + */ + } + + +}