Compare commits

...

2 commits

Author SHA1 Message Date
basti
5d762d1632 Merge branch 'master' of https://git.etud.insa-toulouse.fr/benassai/Projet_POO.git 2020-11-30 18:37:25 +01:00
basti
5421da2cef 30/11 2020-11-30 18:37:10 +01:00
5 changed files with 165 additions and 28 deletions

View file

@ -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<GestionnaireListeUtilisateur.getListeUtilisateur().size(); i++) {
System.out.println("ici : " + GestionnaireListeUtilisateur.getListeUtilisateur().get(i).nom);
}
}
}

View file

@ -2,10 +2,12 @@ package liste;
import java.util.ArrayList; import java.util.ArrayList;
import nom.GestionnaireNom;
public class GestionnaireListeUtilisateur { public class GestionnaireListeUtilisateur {
//contient la liste Utilisateur à jour //contient la liste Utilisateur à jour
public static ArrayList<TypeListeUtilisateur> listeUtilisateur = new ArrayList<TypeListeUtilisateur>(); private static ArrayList<TypeListeUtilisateur> listeUtilisateur = new ArrayList<TypeListeUtilisateur>();
@ -25,10 +27,28 @@ public class GestionnaireListeUtilisateur {
} }
//récupérer la liste lors de la conenxion //TODO
public void recuperationListeInitiale() { public static ArrayList<TypeListeUtilisateur> getListeUtilisateur() {
return listeUtilisateur;
}
public static void setListeUtilisateur(ArrayList<TypeListeUtilisateur> 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 ?
} }

View file

@ -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");
}
}

View file

@ -3,36 +3,45 @@ package liste;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.concurrent.Semaphore; import java.util.concurrent.Semaphore;
import nom.GestionnaireNom;
public class TraitementCmdListe implements Runnable{ public class TraitementCmdListe implements Runnable{
String message; private String[] cmd;
Semaphore semaphore; private Semaphore semaphore;
public TraitementCmdListe(String cmd, Semaphore semaphore) { public TraitementCmdListe(String message, Semaphore semaphore) {
this.message = cmd; this.cmd = message.split("\\$\\$\\$", 0);
this.semaphore = semaphore; this.semaphore = semaphore;
if(cmd.length != 4) {
System.out.println("Erreur nombre d'arguments");
this.cmd = new String[] {"", "", "", ""};
}
} }
public void run() { public void run() {
try { try {
String[] cmd = message.split("\\$\\$\\$", 0); //vérifier longueur 4 ?? //TODO
String ordre = cmd[0]; String ordre = cmd[0];
String id = cmd[1]; String id = cmd[1];
String nom = cmd[2]; String nom = cmd[2];
String ip = cmd[3]; String ip = cmd[3];
if (ordre.equals("listRequest")) {
envoyerNom();
}
semaphore.acquireUninterruptibly(); semaphore.acquireUninterruptibly();
System.out.println("bloqué"); System.out.println("bloqué");
if (ordre.equals("delete")) { if (ordre.equals("delete")) {
GestionnaireListeUtilisateur.listeUtilisateur = supprimeUtilisateur(GestionnaireListeUtilisateur.listeUtilisateur, id); GestionnaireListeUtilisateur.setListeUtilisateur(supprimeUtilisateur(GestionnaireListeUtilisateur.getListeUtilisateur(), id));
} }
if (ordre.equals("add")) { 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é"); System.out.println("libéré");
semaphore.release(); semaphore.release();
@ -40,7 +49,7 @@ public class TraitementCmdListe implements Runnable{
//Thread.sleep(1000); //Thread.sleep(1000);
//System.out.println("fini " + id); //System.out.println("fini " + id);
System.out.println(GestionnaireListeUtilisateur.listeUtilisateur.get(0).nom); System.out.println(GestionnaireListeUtilisateur.getListeUtilisateur().get(0).nom);
} catch (Exception e) {} } 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 // detecte les nouveaux utilisateurs entrant et les ajoute à la liste
private ArrayList<TypeListeUtilisateur> ajouteUtilisateur(ArrayList<TypeListeUtilisateur> listeUtilisateur, String id, String nom, String ip) { private ArrayList<TypeListeUtilisateur> ajouteUtilisateur(ArrayList<TypeListeUtilisateur> listeUtilisateur, String id, String nom, String ip) {

View file

@ -1,34 +1,82 @@
package nom; package nom;
import java.util.*; import java.util.*;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import liste.GestionnaireListeUtilisateur;
public class GestionnaireNom{ public class GestionnaireNom{
public int idUtilisateur; private static String idUtilisateur;
public String[] nomUtilisateur; 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 // attribue le nom "nom" à l'utilisateur
public void nom(String[] nom) { public static void setNom(String nom) {
verifierDisponibiliteNom(nom); nomUtilisateur = nom;
} }
// renvoie l'ID d'un utilisateur ou 0 s'il n'existe pas (ou non en ligne) // 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<GestionnaireListeUtilisateur.getListeUtilisateur().size(); i++) {
if (GestionnaireListeUtilisateur.getListeUtilisateur().get(i).nom.equals(nom)) {
return GestionnaireListeUtilisateur.getListeUtilisateur().get(i).id;
}
}
return "0";
return 0;
} }
// renvoie 1 si le nom est disponible // renvoie 1 si le nom est disponible
private int verifierDisponibiliteNom(String[] nom) { public static boolean verifierDisponibiliteNom(String nom) {
for (int i=0; i<GestionnaireListeUtilisateur.getListeUtilisateur().size(); i++) {
if (GestionnaireListeUtilisateur.getListeUtilisateur().get(i).nom.equals(nom)) {
return false;
}
}
return true;
return 1;
} }
} }