"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
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<SessionClavardage> 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 {

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.
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());
}

View file

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

View file

@ -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{
@ -43,17 +45,37 @@ public class DiscussionUI extends JFrame implements PropertyChangeListener{
*/
public void setSession(SessionClavardage session) {
this.session = session;
}
public void propertyChange(PropertyChangeEvent evt) {
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() {
String message = textField.getText();
if (!message.isEmpty() && this.session != null) {
textField.setText("");
historicField.setText(historicField.getText() + session.getIdSource() +": " + message + "\n");
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");
}
}
/**
@ -67,6 +89,7 @@ public class DiscussionUI extends JFrame implements PropertyChangeListener{
setTitle("Discussion");
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);
}
}
});
}
}