diff --git a/Projet_POO/src/clavardage/EnvoiMessageDistance.java b/Projet_POO/src/clavardage/EnvoiMessageDistance.java index d707be8..332a4bf 100644 --- a/Projet_POO/src/clavardage/EnvoiMessageDistance.java +++ b/Projet_POO/src/clavardage/EnvoiMessageDistance.java @@ -13,55 +13,6 @@ import data.Message; public class EnvoiMessageDistance { - - - public static void main(String[] args) throws IOException { - - //Test 1 - System.out.println("Test 1"); - System.out.println(EnvoiMessageDistance.envoiMessage("command", "World", "", "initialize")); - System.out.println(EnvoiMessageDistance.envoiMessage("message", "Me", "World", "Hello World !")); - System.out.println(EnvoiMessageDistance.envoiMessage("message", "Me", "World", "Hello again !")); - System.out.println(EnvoiMessageDistance.envoiMessage("command", "World", "", "getMessages")); - - //Test 2 (Longue liste de messages en attente) - System.out.println(""); - System.out.println("Test 2"); - System.out.println(EnvoiMessageDistance.envoiMessage("command", "Destinataire", "", "initialize")); - for (int i = 0; i<100; i++) { - System.out.println(EnvoiMessageDistance.envoiMessage("message", "Personne " + i, "Destinataire", "Message numéro " + i)); - } - System.out.println(EnvoiMessageDistance.envoiMessage("command", "Destinataire", "", "getMessages")); - - //Test 3 (Pas de messages en attente) - System.out.println(""); - System.out.println("Test 3"); - System.out.println(EnvoiMessageDistance.envoiMessage("command", "Me", "", "initialize")); - System.out.println(EnvoiMessageDistance.envoiMessage("command", "Me", "", "getMessages")); - - - //Test4 commande invalide - System.out.println(""); - System.out.println("Test 4"); - System.out.println(EnvoiMessageDistance.envoiMessage("command", "World", "", "getMessage")); - - //Test5 type invalide - System.out.println(""); - System.out.println("Test 5"); - System.out.println(EnvoiMessageDistance.envoiMessage("autre", "User1", "User2", "Le type de ce message est invalide")); - - - - /* - Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); - - for (int c; (c = in.read()) >= 0;) - System.out.print((char)c); - */ - - - } - public static ServletResponse envoiMessage(String Type, String Sender, String Recipient, String Body) throws IOException { //Préparation du message @@ -113,6 +64,55 @@ public class EnvoiMessageDistance { } + + public static void main(String[] args) throws IOException { + + //Test 1 + System.out.println("Test 1"); + System.out.println(EnvoiMessageDistance.envoiMessage("command", "World", "", "initialize")); + System.out.println(EnvoiMessageDistance.envoiMessage("message", "Me", "World", "Hello World !")); + System.out.println(EnvoiMessageDistance.envoiMessage("message", "Me", "World", "Hello again !")); + System.out.println(EnvoiMessageDistance.envoiMessage("command", "World", "", "getMessages")); + + //Test 2 (Longue liste de messages en attente) + System.out.println(""); + System.out.println("Test 2"); + System.out.println(EnvoiMessageDistance.envoiMessage("command", "Destinataire", "", "initialize")); + for (int i = 0; i<100; i++) { + System.out.println(EnvoiMessageDistance.envoiMessage("message", "Personne " + i, "Destinataire", "Message numéro " + i)); + } + System.out.println(EnvoiMessageDistance.envoiMessage("command", "Destinataire", "", "getMessages")); + + //Test 3 (Pas de messages en attente) + System.out.println(""); + System.out.println("Test 3"); + System.out.println(EnvoiMessageDistance.envoiMessage("command", "Me", "", "initialize")); + System.out.println(EnvoiMessageDistance.envoiMessage("command", "Me", "", "getMessages")); + + + //Test4 commande invalide + System.out.println(""); + System.out.println("Test 4"); + System.out.println(EnvoiMessageDistance.envoiMessage("command", "World", "", "getMessage")); + + //Test5 type invalide + System.out.println(""); + System.out.println("Test 5"); + System.out.println(EnvoiMessageDistance.envoiMessage("autre", "User1", "User2", "Le type de ce message est invalide")); + + + + /* + Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); + + for (int c; (c = in.read()) >= 0;) + System.out.print((char)c); + */ + + + } + + diff --git a/Projet_POO/src/clavardage/GestionnaireMessagesDistants.java b/Projet_POO/src/clavardage/GestionnaireMessagesDistants.java index 7eb43d6..abe5e6c 100644 --- a/Projet_POO/src/clavardage/GestionnaireMessagesDistants.java +++ b/Projet_POO/src/clavardage/GestionnaireMessagesDistants.java @@ -1,8 +1,11 @@ package clavardage; import java.io.IOException; +import java.util.concurrent.Semaphore; + import data.Message; import data.ServletResponse; +import liste.TraitementCmdListe; import nom.GestionnaireNom; public class GestionnaireMessagesDistants implements Runnable{ @@ -23,13 +26,6 @@ public class GestionnaireMessagesDistants implements Runnable{ } public void run() { - - //On indique au servlet que l'on est disponible pour recevoire des messages - try { - EnvoiMessageDistance.envoiMessage("command", GestionnaireNom.instance().getId(), "", "initialize"); - } catch (IOException e) { - e.printStackTrace(); - } while (true) { @@ -84,6 +80,13 @@ public class GestionnaireMessagesDistants implements Runnable{ } } + else if (msg.getType().equals("listCommand")) { + System.out.print(msg); + Semaphore semaphore = new Semaphore(1, true); + Thread t = new Thread( new TraitementCmdListe(msg.getBody(), semaphore) ); + t.start(); + } + else { //Type de message inconnu. On l'ignore. } diff --git a/Projet_POO/src/clavardage/GestionnaireSessionsDistantes.java b/Projet_POO/src/clavardage/GestionnaireSessionsDistantes.java index 525d23a..1661fb2 100644 --- a/Projet_POO/src/clavardage/GestionnaireSessionsDistantes.java +++ b/Projet_POO/src/clavardage/GestionnaireSessionsDistantes.java @@ -54,17 +54,6 @@ public class GestionnaireSessionsDistantes { return this.sessions; } - public void fermerSessions() throws IOException { - for (SessionClavardageDistante s : this.sessions.values()) { - s.stop(); - } - } - - public void printSessions() { - for (SessionClavardageDistante s : this.sessions.values()) { - System.out.print(s); - } - } } diff --git a/Projet_POO/src/clavardage/GestionnaireSessionsLocales.java b/Projet_POO/src/clavardage/GestionnaireSessionsLocales.java index 1d52b49..0b9d030 100644 --- a/Projet_POO/src/clavardage/GestionnaireSessionsLocales.java +++ b/Projet_POO/src/clavardage/GestionnaireSessionsLocales.java @@ -62,22 +62,11 @@ public class GestionnaireSessionsLocales implements Runnable{ return this.sessions; } - public void fermerSessions() { - for (SessionClavardageLocale s : this.sessions.values()) { - s.stop(); - } - } - - public void printSessions() { - for (SessionClavardageLocale s : this.sessions.values()) { - System.out.print(s); - } - } public void run() { GestionnaireNom gn = GestionnaireNom.instance(); - while (true) { + while (gn.getDansReseau()) { Socket ssocket = this.requestServer.accept(); System.out.print("Données reçues sur le serveur de " + gn.getId() + "\n"); diff --git a/Projet_POO/src/defaut/Main.java b/Projet_POO/src/defaut/Main.java index ffdc552..145b774 100644 --- a/Projet_POO/src/defaut/Main.java +++ b/Projet_POO/src/defaut/Main.java @@ -5,43 +5,48 @@ import java.io.IOException; import liste.GestionnaireListeUtilisateur; import ui.Login_RegisterUI; import servlet.Get; +import servlet.Notify; public class Main { public static void main(String[] args) { + + // les méthode finnissant par 2 sont le double de celle sans 2, servant à tester en local if (liste.Constante.debug) { //on lance le server d'écoute de cmd - GestionnaireListeUtilisateur.instance().ecoute2(2002); + //GestionnaireListeUtilisateur.instance().ecoute2(2001); //on crée manuellement des utilisateurs //debug1 - GestionnaireListeUtilisateur.instance().envoie2("add$$$77$$$Moidebug$$$LocalHost$$$true"); + //GestionnaireListeUtilisateur.instance().envoie2("add$$$77$$$Moidebug$$$LocalHost$$$true"); //on met à jour notre liste - GestionnaireListeUtilisateur.instance().majListe2(); + //GestionnaireListeUtilisateur.instance().majListe2(); + //J'ai dû le déplacer après l'identification } else { //on lance le server d'écoute de cmd GestionnaireListeUtilisateur.instance().ecoute(); //on crée manuellement des utilisateurs - GestionnaireListeUtilisateur.instance().envoie("add$$$77$$$Moi$$$LocalHost$$$true"); + //GestionnaireListeUtilisateur.instance().envoie("add$$$77$$$Moi$$$LocalHost$$$true"); //on met à jour notre liste - GestionnaireListeUtilisateur.instance().majListe(); + //GestionnaireListeUtilisateur.instance().majListe(); + //idem } - // on Subscribe à la servlet + /*// on Subscribe à la servlet try { Get.sendGET(); } catch (IOException e) { e.printStackTrace(); - }; + };*/ //on lance le UI Thread t = new Thread(new Login_RegisterUI()); diff --git a/Projet_POO/src/liste/GestionnaireListeUtilisateur.java b/Projet_POO/src/liste/GestionnaireListeUtilisateur.java index ed483cc..d075a2a 100644 --- a/Projet_POO/src/liste/GestionnaireListeUtilisateur.java +++ b/Projet_POO/src/liste/GestionnaireListeUtilisateur.java @@ -1,7 +1,11 @@ package liste; +import java.io.IOException; import java.util.ArrayList; +import nom.GestionnaireNom; +import servlet.Post; + //import nom.GestionnaireNom; public class GestionnaireListeUtilisateur { @@ -43,14 +47,32 @@ public class GestionnaireListeUtilisateur { //Demande à tout le monde d'envoyer leur infos (TypeListeUtilisateur) --> Uniquement lors de la connexion public void majListe() { - envoie("listRequest"+ "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " "); - + if (GestionnaireNom.instance().getDansReseau()) { + envoie("listRequest"+ "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " "); + } + try { + Post.sendPOST("listRequest$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$" + + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" + + GestionnaireNom.instance().getStatut() ); + } + catch (IOException e) { + //TODO Là aussi traiter l'erreur + } } //debug local public void majListe2() { - envoie2("listRequest"+ "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " "); - + if (GestionnaireNom.instance().getDansReseau()) { + envoie2("listRequest"+ "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " "); + } + try { + Post.sendPOST("listRequest$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$" + + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" + + GestionnaireNom.instance().getStatut() ); + } + catch (IOException e) { + //TODO Là aussi traiter l'erreur + } } //ecoute le port de broadcast pour recevoir le message personnalisé diff --git a/Projet_POO/src/liste/UdpBroadcastServer.java b/Projet_POO/src/liste/UdpBroadcastServer.java index d7a5074..21ed90a 100644 --- a/Projet_POO/src/liste/UdpBroadcastServer.java +++ b/Projet_POO/src/liste/UdpBroadcastServer.java @@ -30,7 +30,7 @@ public class UdpBroadcastServer implements Runnable{ serverSocket.receive(datagramPacket); String receivedMessage = new String(datagramPacket.getData(), 0, datagramPacket.getLength()); - System.out.println(receivedMessage); //debug + System.out.println("Broadcast from udp server: " + receivedMessage); //debug Thread t = new Thread( new TraitementCmdListe(receivedMessage, semaphore) ); t.start(); diff --git a/Projet_POO/src/nom/GestionnaireNom.java b/Projet_POO/src/nom/GestionnaireNom.java index 8a6d7c2..127d069 100644 --- a/Projet_POO/src/nom/GestionnaireNom.java +++ b/Projet_POO/src/nom/GestionnaireNom.java @@ -1,9 +1,11 @@ package nom; +import java.io.IOException; import java.net.InetAddress; import liste.GestionnaireListeUtilisateur; +import servlet.Post; public class GestionnaireNom{ @@ -98,7 +100,7 @@ public class GestionnaireNom{ } - //set dansReseau + //set statut public void setStatut(String statut) { this.statut = statut; @@ -158,30 +160,66 @@ public class GestionnaireNom{ // Associe un nom à l'utilisateur et prévient les autres. public void nommer(String nom) { setNom(nom); - GestionnaireListeUtilisateur.instance().envoie("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau()); - + if (GestionnaireNom.instance().getDansReseau()) { + GestionnaireListeUtilisateur.instance().envoie("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau()); + } + + try { + Post.sendPOST("name$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$" + + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" + + GestionnaireNom.instance().getStatut() ); + } catch (IOException e) { + //TODO Rajouter un message d'erreur + } } //debug public void nommer2(String nom) { - setNom(nom); + setNom(nom); + if (GestionnaireNom.instance().getDansReseau()) { GestionnaireListeUtilisateur.instance().envoie2("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau()); - + } + + try { + Post.sendPOST("name$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$" + + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" + + GestionnaireNom.instance().getStatut() ); + } catch (IOException e) { + //TODO Rajouter un message d'erreur + } } // Supprime l'utilisateur et prévient les autres. public void supprimer() { - GestionnaireListeUtilisateur.instance().envoie("delete"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau()); - + if (GestionnaireNom.instance().getDansReseau()) { + GestionnaireListeUtilisateur.instance().envoie("delete"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau()); + } + try { + Post.sendPOST("delete$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$" + + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" + + GestionnaireNom.instance().getStatut() ); + } + catch (IOException e) { + //TODO La aussi traiter l'erreur + } } //debug public void supprimer2() { - GestionnaireListeUtilisateur.instance().envoie2("delete"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau()); - + if (GestionnaireNom.instance().getDansReseau()) { + GestionnaireListeUtilisateur.instance().envoie2("delete"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau()); + } + try { + Post.sendPOST("delete$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$" + + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" + + GestionnaireNom.instance().getStatut() ); + } + catch (IOException e) { + //TODO La aussi traiter l'erreur + } } diff --git a/Projet_POO/src/servlet/Notify.java b/Projet_POO/src/servlet/Notify.java new file mode 100644 index 0000000..4032053 --- /dev/null +++ b/Projet_POO/src/servlet/Notify.java @@ -0,0 +1,18 @@ +package servlet; + +import java.io.IOException; + +import clavardage.EnvoiMessageDistance; +import nom.GestionnaireNom; + +public class Notify { + + public static void notifier () { + //On indique au servlet que l'on est disponible pour recevoire des messages + try { + EnvoiMessageDistance.envoiMessage("command", GestionnaireNom.instance().getId(), "", "initialize"); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/Projet_POO/src/tcp/TCPServer.java b/Projet_POO/src/tcp/TCPServer.java index 6b41bf6..4c62ae6 100644 --- a/Projet_POO/src/tcp/TCPServer.java +++ b/Projet_POO/src/tcp/TCPServer.java @@ -26,6 +26,7 @@ public class TCPServer { this.socket = null; } catch (IOException e) { + e.printStackTrace(); System.out.print("Could not create socket"); this.socket = null; } diff --git a/Projet_POO/src/ui/ListUI.java b/Projet_POO/src/ui/ListUI.java index fb41e7f..018051c 100644 --- a/Projet_POO/src/ui/ListUI.java +++ b/Projet_POO/src/ui/ListUI.java @@ -213,15 +213,6 @@ public class ListUI extends JFrame implements Runnable{ GestionnaireNom.instance().supprimer(); } - - // on envoie l'info au servlet - try { - Post.sendPOST("delete$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$" - + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" - + GestionnaireNom.instance().getStatut() ); - } catch (IOException e) { - e.printStackTrace(); - } } }); } diff --git a/Projet_POO/src/ui/Login_RegisterUI.java b/Projet_POO/src/ui/Login_RegisterUI.java index 853dd44..b3915a3 100644 --- a/Projet_POO/src/ui/Login_RegisterUI.java +++ b/Projet_POO/src/ui/Login_RegisterUI.java @@ -30,7 +30,10 @@ import bdd.Liaison; import clavardage.GestionnaireMessagesDistants; import clavardage.GestionnaireSessionsDistantes; import clavardage.GestionnaireSessionsLocales; +import liste.GestionnaireListeUtilisateur; import nom.GestionnaireNom; +import servlet.Notify; + import javax.swing.JCheckBox; @@ -231,8 +234,9 @@ public class Login_RegisterUI extends JFrame implements Runnable{ //debug --> utiliser pwd : admin et n'importe quel ID pour créer différents user (attention chaque user doit avoir un server (main)) if( pwd.equals("admin") || id.equals("0") ) { //remplaver || par && -> facilite debug //TODO ( à remplacer par BDD après ) - GestionnaireNom.instance().setId(id); - GestionnaireSessionsLocales.instance(); //Init(GestionnaireSessionsLocales) + GestionnaireSessionsLocales.instance(); + GestionnaireSessionsDistantes.instance(); + GestionnaireMessagesDistants.instance(); dispose(); @@ -254,6 +258,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{ } private void enter() { + String id = idField.getText(); String pwd = String.valueOf(passwordField.getPassword()); @@ -266,7 +271,6 @@ public class Login_RegisterUI extends JFrame implements Runnable{ Connection con = Liaison.getConnection(); st = con.prepareStatement(query); - //System.out.println("la"); st.setString(1, id); st.setString(2, pwd); @@ -276,10 +280,13 @@ public class Login_RegisterUI extends JFrame implements Runnable{ System.out.println("BDD SUCCESS"); GestionnaireNom.instance().setId(id); + Notify.notifier(); + //Instantiation des gestionnaires GestionnaireSessionsLocales.instance(); GestionnaireSessionsDistantes.instance(); GestionnaireMessagesDistants.instance(); + GestionnaireListeUtilisateur.instance().majListe(); dispose(); diff --git a/Projet_POO/src/ui/NomUI.java b/Projet_POO/src/ui/NomUI.java index 017dd03..b409b07 100644 --- a/Projet_POO/src/ui/NomUI.java +++ b/Projet_POO/src/ui/NomUI.java @@ -134,29 +134,13 @@ public class NomUI extends JFrame implements Runnable{ //Celui-ci ne peut pas être "vide" + protection cmd if (!nom.isBlank() && !nom.contains("$$$")) { - boolean nouvelUtilisateur = (GestionnaireNom.instance().getNom() == null); if (liste.Constante.debug) { GestionnaireNom.instance().nommer2(nom); } else { GestionnaireNom.instance().nommer(nom); } - // on envoie l'info à la servlet - try { - if (nouvelUtilisateur) { - Post.sendPOST("new$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$" - + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" - + GestionnaireNom.instance().getStatut() ); // online par defaut ? - } else { - Post.sendPOST("name$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$" - + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" - + GestionnaireNom.instance().getStatut() ); - } - - - } catch (IOException e) { - e.printStackTrace(); - } + dispose(); Thread t = new Thread(new ListUI());