diff --git a/Projet_POO/src/clavardage/gestionnaireClavardage.java b/Projet_POO/src/clavardage/gestionnaireClavardage.java index 42c7e8f..99ca6e9 100644 --- a/Projet_POO/src/clavardage/gestionnaireClavardage.java +++ b/Projet_POO/src/clavardage/gestionnaireClavardage.java @@ -1,4 +1,5 @@ package clavardage; +import java.awt.EventQueue; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; @@ -7,18 +8,27 @@ import java.net.SocketAddress; import java.util.ArrayList; import reseau.*; +import ui.DiscussionUI; public class gestionnaireClavardage implements Runnable{ public static final int PORT_REQUETE_NOUVELLE_SESSION = 19999; + private static gestionnaireClavardage uniqueInstance = null; private ArrayList sessions = new ArrayList(); private TCPServer requestServer; private long id; private String host; private Thread thread; + public static gestionnaireClavardage instance(long id, int backlog, String host) { + if (uniqueInstance == null) { + uniqueInstance = new gestionnaireClavardage(id, backlog, host); + } + return gestionnaireClavardage.uniqueInstance; + } + //Ajouter la supppression des sessions de la liste après déconnexion //Remplacer par un singleton - public gestionnaireClavardage(long id, int backlog, String host) { + private gestionnaireClavardage(long id, int backlog, String host) { this.id = id; this.host = host; this.requestServer = new TCPServer(this.host, backlog, PORT_REQUETE_NOUVELLE_SESSION + (int) id); @@ -32,6 +42,18 @@ public class gestionnaireClavardage implements Runnable{ this.sessions.add(session); client.send(Long.toString(this.id)+"\n"); System.out.print("Paramètres de session envoyée à " + id + "\n"); + + //Lancement de la fenêtre de session + EventQueue.invokeLater(new Runnable() { + public void run() { + try { + DiscussionUI frame = new DiscussionUI(session); + frame.setVisible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); } public ArrayList getSessions() { @@ -80,6 +102,18 @@ public class gestionnaireClavardage implements Runnable{ this.sessions.add(session); clientEnvoi.send(Long.toString(id)+"\n"); System.out.print("Fin de la configuration de " + this.id + "\n"); + + //Lancement de la fenêtre de session + EventQueue.invokeLater(new Runnable() { + public void run() { + try { + DiscussionUI frame = new DiscussionUI(session); + frame.setVisible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); } else if (this.sessions.get(i).getClientReception() == null) { System.out.print("Suite de la configuration sur le serveur de " + this.id + "\n"); diff --git a/Projet_POO/src/clavardage/test.java b/Projet_POO/src/clavardage/test.java index 0d25c9a..cd75825 100644 --- a/Projet_POO/src/clavardage/test.java +++ b/Projet_POO/src/clavardage/test.java @@ -1,14 +1,17 @@ package clavardage; +import java.awt.EventQueue; import java.util.ArrayList; +import ui.DiscussionUI; + public class test { public test() { } - - public static void main(String[] args) { +/* + public static void main2(String[] args) { ArrayList l = new ArrayList(); int i; for (i = 0; i < 15; i++) { @@ -41,6 +44,13 @@ public class test { for (i = 1; i messages = new ArrayList(); + public TCPServerThread(Socket socket, boolean start) { super(socket); @@ -38,11 +44,20 @@ public class TCPServerThread extends TCPClient implements Runnable{ } } + + public void setMessages(String message) { + List newMessages = new ArrayList(this.messages); + newMessages.add(message); + this.support.firePropertyChange("messages", this.messages, newMessages); + this.messages = newMessages; + } + public void run() { while (!terminé) { try { String message = this.receive(); - System.out.print("Status : " + terminé + " " + message + "\n"); + setMessages(message); + System.out.print("Status : " + terminé + ", message reçu : " + message + "\n"); } catch (IOException e) { this.terminé = true; diff --git a/Projet_POO/src/ui/DiscussionUI.java b/Projet_POO/src/ui/DiscussionUI.java index 994ce23..7794062 100644 --- a/Projet_POO/src/ui/DiscussionUI.java +++ b/Projet_POO/src/ui/DiscussionUI.java @@ -7,22 +7,28 @@ import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JScrollPane; +import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.JButton; import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.List; import java.awt.event.ActionEvent; import javax.swing.JScrollBar; +import clavardage.*; -public class DiscussionUI extends JFrame { +public class DiscussionUI extends JFrame implements PropertyChangeListener{ private JPanel contentPane; private JTextField textField; - private JTextField historicField; - + private JTextArea historicField; + private sessionClavardage session; + /** * Launch the application. */ - public static void main(String[] args) { + /*public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { @@ -34,11 +40,22 @@ public class DiscussionUI extends JFrame { } }); } +*/ + + public void propertyChange(PropertyChangeEvent evt) { + List list = ((List) evt.getNewValue()); + historicField.setText(historicField.getText() + (list.get(list.size()-1)) + "\n"); + + } + /** * Create the frame. */ - public DiscussionUI() { + public DiscussionUI(sessionClavardage session) { + this.session = session; + this.session.getClientReception().addPropertyChangeListener(this);; + setTitle("Discussion"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); @@ -51,13 +68,11 @@ public class DiscussionUI extends JFrame { scrollPane.setBounds(21, 11, 403, 164); contentPane.add(scrollPane); - historicField = new JTextField(); + historicField = new JTextArea(); historicField.setEditable(false); scrollPane.setViewportView(historicField); historicField.setColumns(10); - JScrollBar scrollBar = new JScrollBar(); - scrollPane.setRowHeaderView(scrollBar); textField = new JTextField(); textField.setBounds(21, 197, 301, 42); @@ -67,6 +82,10 @@ public class DiscussionUI extends JFrame { JButton sendButton = new JButton("Send"); sendButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { + String message = textField.getText(); + textField.setText(""); + historicField.setText(historicField.getText() + session.getIdSource() +": " + message + "\n"); + session.send(session.getIdSource() + ": " + message+"\n"); } }); sendButton.setBounds(335, 207, 89, 23);