diff --git a/Projet_POO/src/liste/ClientB.java b/Projet_POO/src/liste/ClientB.java new file mode 100644 index 0000000..ce10b84 --- /dev/null +++ b/Projet_POO/src/liste/ClientB.java @@ -0,0 +1,26 @@ +package liste; + + +import nom.*; + +public class ClientB { + GestionnaireListeUtilisateur gestionnaireListeUtilisateur = GestionnaireListeUtilisateur.instance(); //usefull ? puisque static ? + GestionnaireNom gestionnaireNom = GestionnaireNom.instance(); + + void test(String msg) { + //gestionnaireListeUtilisateur.ecoute(); //pas en local sinon plusieurs server sur le même port .... + gestionnaireListeUtilisateur.majListe(); + gestionnaireListeUtilisateur.envoie(msg); + + int a=0; + for(int i=0;i<100000;i++) { + a+=1; + } + + for(int i=0; i listeUtilisateur = new ArrayList(); + private static ArrayList listeUtilisateur = new ArrayList(); @@ -25,10 +27,28 @@ public class GestionnaireListeUtilisateur { } - //récupérer la liste lors de la conenxion //TODO - public void recuperationListeInitiale() { + + public static ArrayList getListeUtilisateur() { + return listeUtilisateur; + + } + + + + public static void setListeUtilisateur(ArrayList liste) { + listeUtilisateur = liste; + + } + + + + //récupérer la liste des autres //TODO + public void majListe() { + UdpBroadcastClient client = new UdpBroadcastClient(ConstanteListeUtilisateur.NUM_PORT_SERVER, + "listRequest"+ "$$$" + " " + "$$$" + " " + "$$$" + " "); + Thread t = new Thread(client); + t.start(); - //ici ? } diff --git a/Projet_POO/src/liste/MainB.java b/Projet_POO/src/liste/MainB.java new file mode 100644 index 0000000..05faf72 --- /dev/null +++ b/Projet_POO/src/liste/MainB.java @@ -0,0 +1,23 @@ +package liste; + +//import java.util.concurrent.ExecutorService; +//import java.util.concurrent.Executors; + +public class MainB { + + public static void main(String[] args) { + int portServer = ConstanteListeUtilisateur.NUM_PORT_SERVER; + + UdpBroadcastServer server = new UdpBroadcastServer(portServer); + ClientB client0 = new ClientB(); + ClientB client1 = new ClientB(); + ClientB client2 = new ClientB(); + + Thread ts = new Thread(server); + ts.start(); + + client0.test("add$$$" + 77 + "$$$Delta$$$LocalHost"); + client1.test("add$$$" + 75 + "$$$Beta$$$LocalHost"); + client2.test("add$$$" + 11 + "$$$Alpha$$$LocalHost"); + } +} diff --git a/Projet_POO/src/liste/TraitementCmdListe.java b/Projet_POO/src/liste/TraitementCmdListe.java index e7465e5..ad82019 100644 --- a/Projet_POO/src/liste/TraitementCmdListe.java +++ b/Projet_POO/src/liste/TraitementCmdListe.java @@ -3,36 +3,45 @@ package liste; import java.util.ArrayList; import java.util.concurrent.Semaphore; +import nom.GestionnaireNom; + public class TraitementCmdListe implements Runnable{ - String message; - Semaphore semaphore; + private String[] cmd; + private Semaphore semaphore; - public TraitementCmdListe(String cmd, Semaphore semaphore) { - this.message = cmd; + public TraitementCmdListe(String message, Semaphore semaphore) { + this.cmd = message.split("\\$\\$\\$", 0); this.semaphore = semaphore; - + if(cmd.length != 4) { + System.out.println("Erreur nombre d'arguments"); + this.cmd = new String[] {"", "", "", ""}; + } } + + + public void run() { try { - - String[] cmd = message.split("\\$\\$\\$", 0); //vérifier longueur 4 ?? //TODO String ordre = cmd[0]; String id = cmd[1]; String nom = cmd[2]; String ip = cmd[3]; - + + if (ordre.equals("listRequest")) { + envoyerNom(); + } semaphore.acquireUninterruptibly(); System.out.println("bloqué"); if (ordre.equals("delete")) { - GestionnaireListeUtilisateur.listeUtilisateur = supprimeUtilisateur(GestionnaireListeUtilisateur.listeUtilisateur, id); + GestionnaireListeUtilisateur.setListeUtilisateur(supprimeUtilisateur(GestionnaireListeUtilisateur.getListeUtilisateur(), id)); } if (ordre.equals("add")) { - GestionnaireListeUtilisateur.listeUtilisateur = ajouteUtilisateur(GestionnaireListeUtilisateur.listeUtilisateur, id, nom, ip); + GestionnaireListeUtilisateur.setListeUtilisateur(ajouteUtilisateur(GestionnaireListeUtilisateur.getListeUtilisateur(), id, nom, ip)); } System.out.println("libéré"); semaphore.release(); @@ -40,7 +49,7 @@ public class TraitementCmdListe implements Runnable{ //Thread.sleep(1000); //System.out.println("fini " + id); - System.out.println(GestionnaireListeUtilisateur.listeUtilisateur.get(0).nom); + System.out.println(GestionnaireListeUtilisateur.getListeUtilisateur().get(0).nom); } catch (Exception e) {} @@ -48,6 +57,17 @@ public class TraitementCmdListe implements Runnable{ + //envoie la liste courrante d'utilisateur + public void envoyerNom() { //localHost TODO (gerer IP, unhandle exception ...) + + UdpBroadcastClient client = new UdpBroadcastClient(ConstanteListeUtilisateur.NUM_PORT_SERVER, + "add"+ "$$$" + GestionnaireNom.getId() + "$$$" + GestionnaireNom.getNom() + "$$$" + "LocalHost"); + Thread t = new Thread(client); + t.start(); + } + + + // detecte les nouveaux utilisateurs entrant et les ajoute à la liste private ArrayList ajouteUtilisateur(ArrayList listeUtilisateur, String id, String nom, String ip) { diff --git a/Projet_POO/src/nom/GestionnaireNom.java b/Projet_POO/src/nom/GestionnaireNom.java index 8f481a1..ae1e346 100644 --- a/Projet_POO/src/nom/GestionnaireNom.java +++ b/Projet_POO/src/nom/GestionnaireNom.java @@ -1,34 +1,82 @@ package nom; import java.util.*; +import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; + +import liste.GestionnaireListeUtilisateur; public class GestionnaireNom{ - public int idUtilisateur; - public String[] nomUtilisateur; + private static String idUtilisateur; + private static String nomUtilisateur; + //public static String ipUtilisateur = InetAddress.getLocalHost().getHostName(); + + + //Instance du gestionnaire de liste + static private GestionnaireNom uniqueInstance = null; + + //Renvoie le gestionnaire de liste, ou le créé s'il n'existe pas encore + static public GestionnaireNom instance() { + //Si l'instance n'existe pas, on la créé + if (GestionnaireNom.uniqueInstance == null) { + GestionnaireNom.uniqueInstance = new GestionnaireNom(); + } + + return GestionnaireNom.uniqueInstance; + } + + + + public static String getNom() { + return nomUtilisateur; + + } + + + + public static String getId() { + return idUtilisateur; + + } + // attribue le nom "nom" à l'utilisateur - public void nom(String[] nom) { - verifierDisponibiliteNom(nom); - - - + public static void setNom(String nom) { + nomUtilisateur = nom; + } + + + // renvoie l'ID d'un utilisateur ou 0 s'il n'existe pas (ou non en ligne) - public int idFromNom(String[] nom) { + public String idFromNom(String nom) { + for (int i=0; i