From a60d2e2222420b4414eea1431475976119446e61 Mon Sep 17 00:00:00 2001 From: benassai Date: Mon, 14 Dec 2020 18:03:14 +0100 Subject: [PATCH] "Ajout: fermeture des sessions de clavardage." --- .../clavardage/gestionnaireClavardage.java | 10 +++- Projet_POO/src/nom/GestionnaireNom.java | 4 +- Projet_POO/src/reseau/TCPServerThread.java | 10 +++- Projet_POO/src/ui/DiscussionUI.java | 46 ++++++++++++++++--- 4 files changed, 59 insertions(+), 11 deletions(-) diff --git a/Projet_POO/src/clavardage/gestionnaireClavardage.java b/Projet_POO/src/clavardage/gestionnaireClavardage.java index e1527e6..3044150 100644 --- a/Projet_POO/src/clavardage/gestionnaireClavardage.java +++ b/Projet_POO/src/clavardage/gestionnaireClavardage.java @@ -30,7 +30,8 @@ public class gestionnaireClavardage implements Runnable{ //Remplacer par un singleton private gestionnaireClavardage(int backlog) { GestionnaireNom gn = GestionnaireNom.instance(); - this.requestServer = new TCPServer("localhost", backlog, PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(gn.getId())); + System.out.print(gn.getIp()); + this.requestServer = new TCPServer(gn.getIp(), backlog, PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(gn.getId())); this.thread = new Thread(this); this.thread.start(); } @@ -56,6 +57,11 @@ public class gestionnaireClavardage implements Runnable{ }); } + public void deleteSession(SessionClavardage session) { + session.stop(); + this.sessions.remove(session); + } + public ArrayList getSessions() { return this.sessions; } @@ -105,6 +111,7 @@ public class gestionnaireClavardage implements Runnable{ this.sessions.add(session); clientEnvoi.send(gn.getId()+"\n"); System.out.print("Fin de la configuration de " + gn.getId() + "\n"); + System.out.println("Il y a actuellement " + sessions.size() + " session(s) ouverte(s)."); //Lancement de la fenêtre de session EventQueue.invokeLater(new Runnable() { @@ -123,6 +130,7 @@ public class gestionnaireClavardage implements Runnable{ //il existe une session entre les deux utilisateurs, mais la phase de configuration n'est pas terminée this.sessions.get(i).setClientReception(client); System.out.print("Fin de la configuration de " + gn.getId() + "\n"); + System.out.println("Il y a actuellement " + sessions.size() + " session(s) ouverte(s)."); } else { diff --git a/Projet_POO/src/nom/GestionnaireNom.java b/Projet_POO/src/nom/GestionnaireNom.java index b961d98..b6c881b 100644 --- a/Projet_POO/src/nom/GestionnaireNom.java +++ b/Projet_POO/src/nom/GestionnaireNom.java @@ -130,14 +130,14 @@ public class GestionnaireNom{ //check la disponibilité est asocie un nom à l'utilisateur si c'est bon, et prévient les autres. public void nommer(String nom) { setNom(nom); - GestionnaireListeUtilisateur.instance().envoie("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + "LocalHost"); + GestionnaireListeUtilisateur.instance().envoie("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + GestionnaireNom.instance().getIp()); } //debug public void nommer2(String nom) { setNom(nom); - GestionnaireListeUtilisateur.instance().envoie2("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + "LocalHost"); + GestionnaireListeUtilisateur.instance().envoie2("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + GestionnaireNom.instance().getIp()); } diff --git a/Projet_POO/src/reseau/TCPServerThread.java b/Projet_POO/src/reseau/TCPServerThread.java index 3023e55..9a256c1 100644 --- a/Projet_POO/src/reseau/TCPServerThread.java +++ b/Projet_POO/src/reseau/TCPServerThread.java @@ -57,11 +57,17 @@ public class TCPServerThread extends TCPClient implements Runnable{ try { String message = this.receive(); setMessages(message); - System.out.print("Status : " + terminé + ", message reçu : " + message + "\n"); + if (message != null) { + System.out.print("Status : " + terminé + ", message reçu : " + message + "\n"); + } + else { + //La connexion a été interrompue + this.terminé = true; + } } catch (IOException e) { this.terminé = true; - System.out.print("Connection sur le port " + this.port + " interrompue par " + this.adresseCible +"\n"); + System.out.print("Connection sur le port " + this.port + " vers " + this.adresseCible +" interrompue.\n"); } catch (Exception e) { this.terminé = true; diff --git a/Projet_POO/src/ui/DiscussionUI.java b/Projet_POO/src/ui/DiscussionUI.java index e02b5d8..bb9df3a 100644 --- a/Projet_POO/src/ui/DiscussionUI.java +++ b/Projet_POO/src/ui/DiscussionUI.java @@ -4,6 +4,7 @@ import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JScrollPane; @@ -17,6 +18,7 @@ import java.util.List; import java.awt.event.ActionEvent; import javax.swing.JScrollBar; import clavardage.*; +import nom.GestionnaireNom; public class DiscussionUI extends JFrame implements PropertyChangeListener{ @@ -42,18 +44,38 @@ public class DiscussionUI extends JFrame implements PropertyChangeListener{ } */ + + public void setSession(SessionClavardage session) { + this.session = session; + } public void propertyChange(PropertyChangeEvent evt) { List list = ((List) evt.getNewValue()); - historicField.setText(historicField.getText() + (list.get(list.size()-1)) + "\n"); - + String message = list.get(list.size()-1); + if (message != null) { + historicField.setText(historicField.getText() + message + "\n"); + } + else + { + historicField.setText(historicField.getText() + GestionnaireNom.instance().nomFromId(session.getIdDestination()) + " s'est déconnecté(e).\n"); + this.finDeSession(0); + } } + public void finDeSession(int i) { + System.out.println(i); + gestionnaireClavardage.instance().deleteSession(session); + this.setSession(null); + System.out.println(this.session); + } + private void sendMessage() { String message = textField.getText(); - textField.setText(""); - historicField.setText(historicField.getText() + session.getIdSource() +": " + message + "\n"); - session.send(session.getIdSource() + ": " + message+"\n"); + if (!message.isEmpty() && this.session != null) { + textField.setText(""); + historicField.setText(historicField.getText() + GestionnaireNom.instance().nomFromId(session.getIdSource()) +": " + message + "\n"); + session.send(GestionnaireNom.instance().nomFromId(session.getIdSource()) + ": " + message+"\n"); + } } /** @@ -66,7 +88,8 @@ public class DiscussionUI extends JFrame implements PropertyChangeListener{ this.session.getClientReception().addPropertyChangeListener(this);; setTitle("Discussion"); - setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); @@ -101,5 +124,16 @@ public class DiscussionUI extends JFrame implements PropertyChangeListener{ }); sendButton.setBounds(335, 207, 89, 23); contentPane.add(sendButton); + + this.addWindowListener(new java.awt.event.WindowAdapter() { + @Override + public void windowClosing(java.awt.event.WindowEvent windowEvent) { + DiscussionUI window = (DiscussionUI) windowEvent.getSource(); + if (window.session != null) { + System.out.println(window.session); + window.finDeSession(1); + } + } + }); } }