From a7bb562f3d3fff0ba6be50bca148186422f28df4 Mon Sep 17 00:00:00 2001 From: basti Date: Fri, 27 Nov 2020 18:24:28 +0100 Subject: [PATCH] Gros avancement au niveau de la gestion de la ListeUtilisateur --- .../src/liste/ConstanteListeUtilisateur.java | 9 ++ .../GestionnaireListeUtilisateur.java | 45 +++------ Projet_POO/src/liste/MainUDPBroad.java | 30 ++++++ Projet_POO/src/liste/MainUDPMulti.java | 26 ++++++ Projet_POO/src/liste/MainUDPUni.java | 31 +++++++ Projet_POO/src/liste/TraitementCmdListe.java | 93 +++++++++++++++++++ .../src/liste/TypeListeUtilisateur.java | 15 +++ Projet_POO/src/liste/UdpBroadcastClient.java | 47 ++++++++++ Projet_POO/src/liste/UdpBroadcastServer.java | 48 ++++++++++ Projet_POO/src/liste/UdpMulticastClient.java | 52 +++++++++++ Projet_POO/src/liste/UdpMulticastServer.java | 63 +++++++++++++ .../src/{nom => liste}/UdpUnicastClient.java | 16 ++-- .../src/{nom => liste}/UdpUnicastServer.java | 14 ++- Projet_POO/src/nom/MainUDP.java | 19 ---- Projet_POO/src/nom/TypeListeUtilisateur.java | 8 -- 15 files changed, 447 insertions(+), 69 deletions(-) create mode 100644 Projet_POO/src/liste/ConstanteListeUtilisateur.java rename Projet_POO/src/{nom => liste}/GestionnaireListeUtilisateur.java (51%) create mode 100644 Projet_POO/src/liste/MainUDPBroad.java create mode 100644 Projet_POO/src/liste/MainUDPMulti.java create mode 100644 Projet_POO/src/liste/MainUDPUni.java create mode 100644 Projet_POO/src/liste/TraitementCmdListe.java create mode 100644 Projet_POO/src/liste/TypeListeUtilisateur.java create mode 100644 Projet_POO/src/liste/UdpBroadcastClient.java create mode 100644 Projet_POO/src/liste/UdpBroadcastServer.java create mode 100644 Projet_POO/src/liste/UdpMulticastClient.java create mode 100644 Projet_POO/src/liste/UdpMulticastServer.java rename Projet_POO/src/{nom => liste}/UdpUnicastClient.java (72%) rename Projet_POO/src/{nom => liste}/UdpUnicastServer.java (76%) delete mode 100644 Projet_POO/src/nom/MainUDP.java delete mode 100644 Projet_POO/src/nom/TypeListeUtilisateur.java diff --git a/Projet_POO/src/liste/ConstanteListeUtilisateur.java b/Projet_POO/src/liste/ConstanteListeUtilisateur.java new file mode 100644 index 0000000..6b5d0f5 --- /dev/null +++ b/Projet_POO/src/liste/ConstanteListeUtilisateur.java @@ -0,0 +1,9 @@ +package liste; + +public class ConstanteListeUtilisateur { + + static public String IP_BROADCAST = "255.255.255.255"; + static public int SIZE_ORDRE = 100; + static public int NUM_PORT_SERVER = 2000; + +} diff --git a/Projet_POO/src/nom/GestionnaireListeUtilisateur.java b/Projet_POO/src/liste/GestionnaireListeUtilisateur.java similarity index 51% rename from Projet_POO/src/nom/GestionnaireListeUtilisateur.java rename to Projet_POO/src/liste/GestionnaireListeUtilisateur.java index 16c72ed..86a4d3a 100644 --- a/Projet_POO/src/nom/GestionnaireListeUtilisateur.java +++ b/Projet_POO/src/liste/GestionnaireListeUtilisateur.java @@ -1,12 +1,13 @@ -package nom; +package liste; import java.util.ArrayList; -import java.util.List; public class GestionnaireListeUtilisateur { //contient la liste Utilisateur à jour - public List listeUtilisateur = new ArrayList(); + public static ArrayList listeUtilisateur = new ArrayList(); + + //Instance du gestionnaire de liste static private GestionnaireListeUtilisateur uniqueInstance = null; @@ -23,44 +24,26 @@ public class GestionnaireListeUtilisateur { } - //crée la liste utilisateur initial ? - private GestionnaireListeUtilisateur() { + + //récupérer la liste lors de la conenxion //TODO + public void recuperationListeInitiale() { + //ici ? } //ecoute le port de broadcast pour recevoir le message personnalisé - public String ecoute() { - int portEcoute = 2000; - UdpUnicastServer server = new UdpUnicastServer(portEcoute); - - - - - return ""; + public void ecoute() { //static ?? + Thread ecouteThread = new Thread(new UdpUnicastServer(ConstanteListeUtilisateur.NUM_PORT_SERVER)); + ecouteThread.start(); } //envoie en Broadcast aux autres liste les infos sur cet utilisateur - public void envoie() { - - + public void envoie(String message) { + Thread envoieThread = new Thread(new UdpBroadcastClient(ConstanteListeUtilisateur.NUM_PORT_SERVER, message)); + envoieThread.start(); } - //met à jour la Liste d'utilisateur - public void MAJListeUtilisateur() { - ajouteUtilisateur(); - supprimeUtilisateur(); - - } - // detecte les nouveaux utilisateurs entrant et les ajoute à la liste - private void ajouteUtilisateur() { - - } - - // detecte les utilisateurs sortant et les supprime de la liste - private void supprimeUtilisateur() { - - } } diff --git a/Projet_POO/src/liste/MainUDPBroad.java b/Projet_POO/src/liste/MainUDPBroad.java new file mode 100644 index 0000000..467a4cf --- /dev/null +++ b/Projet_POO/src/liste/MainUDPBroad.java @@ -0,0 +1,30 @@ +package liste; + +//import java.util.concurrent.ExecutorService; +//import java.util.concurrent.Executors; + +public class MainUDPBroad { + + public static void main(String[] args) { + int portServer = ConstanteListeUtilisateur.NUM_PORT_SERVER; + + UdpBroadcastServer server = new UdpBroadcastServer(portServer); + UdpBroadcastClient client = new UdpBroadcastClient(portServer, "add$$$" + 77 + "$$$Delta$$$LocalHost"); + UdpBroadcastClient client1 = new UdpBroadcastClient(portServer, "add$$$" + 75 + "$$$Beta$$$LocalHost"); + UdpBroadcastClient client2 = new UdpBroadcastClient(portServer, "add$$$" + 11 + "$$$Alpha$$$LocalHost"); + + Thread ts = new Thread(server); + Thread t0 = new Thread(client); + Thread t1 = new Thread(client1); + Thread t2 = new Thread(client2); + + ts.start(); + t0.start(); + t1.start(); + t2.start(); + + //ExecutorService executorService = Executors.newFixedThreadPool(2); + //executorService.submit(server); + //executorService.submit(client); + } +} diff --git a/Projet_POO/src/liste/MainUDPMulti.java b/Projet_POO/src/liste/MainUDPMulti.java new file mode 100644 index 0000000..0048dc2 --- /dev/null +++ b/Projet_POO/src/liste/MainUDPMulti.java @@ -0,0 +1,26 @@ +package liste; + +//import java.util.concurrent.ExecutorService; +//import java.util.concurrent.Executors; + +public class MainUDPMulti { + + public static void main(String[] args) { //ne marche pas : soit route (routeur) soit code soit 2 .... + int portServer = 2000; + int multicastPort = 7000; + + UdpMulticastServer server = new UdpMulticastServer(portServer, multicastPort); + UdpMulticastClient client = new UdpMulticastClient(portServer, multicastPort); + + Thread ts = new Thread(server); + Thread t0 = new Thread(client); + + + ts.start(); + t0.start(); + + //ExecutorService executorService = Executors.newFixedThreadPool(2); + //executorService.submit(server); + //executorService.submit(client); + } +} diff --git a/Projet_POO/src/liste/MainUDPUni.java b/Projet_POO/src/liste/MainUDPUni.java new file mode 100644 index 0000000..adc4c92 --- /dev/null +++ b/Projet_POO/src/liste/MainUDPUni.java @@ -0,0 +1,31 @@ +package liste; + +//import java.util.concurrent.ExecutorService; +//import java.util.concurrent.Executors; + +public class MainUDPUni { + + public static void main(String[] args) { + int portServer = 2000; + + + UdpUnicastServer server = new UdpUnicastServer(portServer); + UdpUnicastClient client = new UdpUnicastClient(portServer, "LocalHost"); + UdpUnicastClient client1 = new UdpUnicastClient(portServer, "LocalHost"); + UdpUnicastClient client2 = new UdpUnicastClient(portServer, "LocalHost"); + + Thread ts = new Thread(server); + Thread t0 = new Thread(client); + Thread t1 = new Thread(client1); + Thread t2 = new Thread(client2); + + ts.start(); + t0.start(); + t1.start(); + t2.start(); + + //ExecutorService executorService = Executors.newFixedThreadPool(2); + //executorService.submit(server); + //executorService.submit(client); + } +} diff --git a/Projet_POO/src/liste/TraitementCmdListe.java b/Projet_POO/src/liste/TraitementCmdListe.java new file mode 100644 index 0000000..e7465e5 --- /dev/null +++ b/Projet_POO/src/liste/TraitementCmdListe.java @@ -0,0 +1,93 @@ +package liste; + +import java.util.ArrayList; +import java.util.concurrent.Semaphore; + +public class TraitementCmdListe implements Runnable{ + + String message; + Semaphore semaphore; + + public TraitementCmdListe(String cmd, Semaphore semaphore) { + this.message = cmd; + this.semaphore = semaphore; + + } + + 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]; + + + semaphore.acquireUninterruptibly(); + System.out.println("bloqué"); + + if (ordre.equals("delete")) { + GestionnaireListeUtilisateur.listeUtilisateur = supprimeUtilisateur(GestionnaireListeUtilisateur.listeUtilisateur, id); + } + + if (ordre.equals("add")) { + GestionnaireListeUtilisateur.listeUtilisateur = ajouteUtilisateur(GestionnaireListeUtilisateur.listeUtilisateur, id, nom, ip); + } + System.out.println("libéré"); + semaphore.release(); + + + //Thread.sleep(1000); + //System.out.println("fini " + id); + System.out.println(GestionnaireListeUtilisateur.listeUtilisateur.get(0).nom); + + } catch (Exception e) {} + + } + + + + + // detecte les nouveaux utilisateurs entrant et les ajoute à la liste + private ArrayList ajouteUtilisateur(ArrayList listeUtilisateur, String id, String nom, String ip) { + + boolean inListe = false; + + //si il est dans la liste on le renomme + for (int i=0; i supprimeUtilisateur(ArrayList listeUtilisateur, String id) { + + for (int i=0; i