"Ajout: fermeture des sessions de clavardage."

This commit is contained in:
Marino Benassai 2020-12-14 18:03:14 +01:00
parent 9959697a46
commit a60d2e2222
4 changed files with 59 additions and 11 deletions

View file

@ -30,7 +30,8 @@ public class gestionnaireClavardage implements Runnable{
//Remplacer par un singleton //Remplacer par un singleton
private gestionnaireClavardage(int backlog) { private gestionnaireClavardage(int backlog) {
GestionnaireNom gn = GestionnaireNom.instance(); 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 = new Thread(this);
this.thread.start(); 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<SessionClavardage> getSessions() { public ArrayList<SessionClavardage> getSessions() {
return this.sessions; return this.sessions;
} }
@ -105,6 +111,7 @@ public class gestionnaireClavardage implements Runnable{
this.sessions.add(session); this.sessions.add(session);
clientEnvoi.send(gn.getId()+"\n"); clientEnvoi.send(gn.getId()+"\n");
System.out.print("Fin de la configuration de " + 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 //Lancement de la fenêtre de session
EventQueue.invokeLater(new Runnable() { 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 //il existe une session entre les deux utilisateurs, mais la phase de configuration n'est pas terminée
this.sessions.get(i).setClientReception(client); this.sessions.get(i).setClientReception(client);
System.out.print("Fin de la configuration de " + 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).");
} }
else { else {

View file

@ -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. //check la disponibilité est asocie un nom à l'utilisateur si c'est bon, et prévient les autres.
public void nommer(String nom) { public void nommer(String nom) {
setNom(nom); setNom(nom);
GestionnaireListeUtilisateur.instance().envoie("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + "LocalHost"); GestionnaireListeUtilisateur.instance().envoie("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + GestionnaireNom.instance().getIp());
} }
//debug //debug
public void nommer2(String nom) { public void nommer2(String nom) {
setNom(nom); setNom(nom);
GestionnaireListeUtilisateur.instance().envoie2("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + "LocalHost"); GestionnaireListeUtilisateur.instance().envoie2("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + GestionnaireNom.instance().getIp());
} }

View file

@ -57,11 +57,17 @@ public class TCPServerThread extends TCPClient implements Runnable{
try { try {
String message = this.receive(); String message = this.receive();
setMessages(message); 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) { catch (IOException e) {
this.terminé = true; 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) { catch (Exception e) {
this.terminé = true; this.terminé = true;

View file

@ -4,6 +4,7 @@ import java.awt.BorderLayout;
import java.awt.EventQueue; import java.awt.EventQueue;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
@ -17,6 +18,7 @@ import java.util.List;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import javax.swing.JScrollBar; import javax.swing.JScrollBar;
import clavardage.*; import clavardage.*;
import nom.GestionnaireNom;
public class DiscussionUI extends JFrame implements PropertyChangeListener{ 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) { public void propertyChange(PropertyChangeEvent evt) {
List<String> list = ((List<String>) evt.getNewValue()); List<String> list = ((List<String>) 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() { private void sendMessage() {
String message = textField.getText(); String message = textField.getText();
textField.setText(""); if (!message.isEmpty() && this.session != null) {
historicField.setText(historicField.getText() + session.getIdSource() +": " + message + "\n"); textField.setText("");
session.send(session.getIdSource() + ": " + message+"\n"); 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);; this.session.getClientReception().addPropertyChangeListener(this);;
setTitle("Discussion"); setTitle("Discussion");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 450, 300); setBounds(100, 100, 450, 300);
contentPane = new JPanel(); contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 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); sendButton.setBounds(335, 207, 89, 23);
contentPane.add(sendButton); 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);
}
}
});
} }
} }