Projet_POO/Projet_POO/src/main/java/liste/TraitementCmdListe.java

160 lines
4,4 KiB
Java

package liste;
import java.util.ArrayList;
import java.util.concurrent.Semaphore;
import nom.GestionnaireNom;
import ui.ListUI;
public class TraitementCmdListe implements Runnable{
private String[] cmd; //ordre$$$id$$$nom$$$ip$$$statut$$$local
private Semaphore semaphore;
//Constructeur
public TraitementCmdListe(String message, Semaphore semaphore) {
this.cmd = message.split("\\$\\$\\$", 0);
this.semaphore = semaphore;
if(cmd.length != 6) {
System.out.println("Erreur nombre d'arguments");
this.cmd = new String[] {"", "", "", "", "", ""};
}
}
public void run() {
try {
//On décompose la cmd
String ordre = cmd[0]; // add / delete / listRequest / statut
String id = cmd[1];
String nom = cmd[2];
String ip = cmd[3];
String local = cmd[4];
String statut = cmd[5];
if (ordre.equals("listRequest") && GestionnaireNom.instance().getNom() != null) {
if (defaut.Constante.debug) {
for (int i = 2000; i<2010; i++) envoyerNom2(i);
} else {
envoyerNom();
}
}
semaphore.acquireUninterruptibly();
if (ordre.equals("delete")) {
supprimeUtilisateur(id);
}
if (ordre.equals("add") && !nom.equals("null")) {
ajouteUtilisateur(id, nom, ip, statut, Boolean.parseBoolean(local)); //TODO
//debug
for(int i=0; i<GestionnaireListeUtilisateur.instance().getListeUtilisateur().size(); i++) {
System.out.println("dans ListeUtilisateur : " + GestionnaireListeUtilisateur.instance().getListeUtilisateur().get(i).nom + " "
+ GestionnaireListeUtilisateur.instance().getListeUtilisateur().get(i).id );
}
}
if (ordre.equals("statut")) {
changeStatut(id, statut);
}
//System.out.println("libéré");
semaphore.release();
} catch (Exception e) {
System.out.println("Erreur : run TraitementCmdListe");
e.printStackTrace();
}
}
//envoie la liste courrante d'utilisateur
private void envoyerNom() { //localHost TODO (gerer IP, unhandle exception ...)
GestionnaireListeUtilisateur.instance().envoie(
"add"+ "$$$" + GestionnaireNom.instance().getId() + "$$$" +
GestionnaireNom.instance().getNom() + "$$$" + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" + GestionnaireNom.instance().getStatut() );
}
//debug
private void envoyerNom2(int port) { //localHost TODO (gerer IP, unhandle exception ...)
GestionnaireListeUtilisateur.instance().envoie2(
"add"+ "$$$" + GestionnaireNom.instance().getId() + "$$$" +
GestionnaireNom.instance().getNom() + "$$$" + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" + GestionnaireNom.instance().getStatut());
}
//Ajoute les utilisateurs à la listeUtilisateur
private void ajouteUtilisateur(String id, String nom, String ip, String statut, boolean local) {
boolean inListe = false;
ArrayList<TypeListeUtilisateur> listeUtilisateur = GestionnaireListeUtilisateur.instance().getListeUtilisateur();
//si il est dans la liste on le renomme
for (int i=0; i<listeUtilisateur.size(); i++) {
if (listeUtilisateur.get(i).id.equals(id)) {
inListe = true;
TypeListeUtilisateur utilisateur = listeUtilisateur.get(i);
utilisateur.nom = nom;
break;
}
}
//s'il n'est pas dans la liste on la rajoute
if (!inListe) {
listeUtilisateur.add(new TypeListeUtilisateur(id, nom, ip, statut, local));
}
//mise à jour des graphismes
ListUI.update();
}
// Supprime un utilisateur de la ListeUtilisateur
private void supprimeUtilisateur(String id) {
ArrayList<TypeListeUtilisateur> listeUtilisateur = GestionnaireListeUtilisateur.instance().getListeUtilisateur();
for (int i=0; i<listeUtilisateur.size(); i++) {
if (listeUtilisateur.get(i).id.equals(id)) {
listeUtilisateur.remove(i);
break;
}
}
//mise à jour des graphismes
ListUI.update();
}
// Met à jour le Statut d'un utilisateur
private void changeStatut(String id, String statut) {
for (TypeListeUtilisateur user : GestionnaireListeUtilisateur.instance().getListeUtilisateur()) {
if (user.id.equals(id)) {
user.statut = statut;
break;
}
}
//mise à jour des graphismes
ListUI.update();
}
}