/* Classe: listeUsager.c Description: Liste des usagers et ses methodes de manipulation Auteurs: Alain Sirois SIRA15068305 Philippe Mercure MERP27078708 Date: 18 juin 2011 Cours: yyyyyyyyyy Groupe: 30 Travail: TP2 Professeur: xxxxxxxxxx */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include "listeUsager.h" #include "usager.h" #include "config.h" static int nbrElems = 0; static void* lesUsagers[MAX_USAGERS]; // Ajouter un usager dans la liste void listeUsagerAjouter (void* elem) { assert (elem != NULL && "elem doit etre un pointeur non NULL"); assert (nbrElems < MAX_USAGERS && "liste d'usager pleine"); lesUsagers[nbrElems] = creerUsagerCopie (elem); //lesUsagers[nbrElems] = elem; nbrElems++; } // Donner le nombre d'usagers dans la liste int listeUsagerTaille () { return nbrElems; } // Verifier si un usager est dans la liste int listeUsagerContient (char* nom) { int i; for (i=0; i < nbrElems; i++) { if ( !strcmp(donnerUsagerNom(lesUsagers[i]), nom) ) return 1; } return 0; } // Donner la position d'un usager dans la liste int listeUsagerPosition (char* nom) { int i; for (i=0; i < nbrElems; i++) { if ( !strcmp(donnerUsagerNom(lesUsagers[i]), nom) ) return i; } return -1; } // Retourner l'usager a une certaine position void* listeUsagerObtenir (int position) { assert (nbrElems > 0 && "liste d'usagers vide"); return lesUsagers[position]; } // Retourner l'usager portant un certain nom void* listeUsagerElement (char* nom) { assert (nbrElems > 0 && "liste d'usagers vide"); return lesUsagers[ listeUsagerPosition(nom) ]; } // Enlever un usager dans la liste void* listeUsagerEnlever (char *nom) { assert (nbrElems > 0 && "liste d'usagers vide"); int position = listeUsagerPosition (nom); Usager usager = lesUsagers[position]; supprimerUsager (lesUsagers[position]); int i; for ( i=position; i < (nbrElems-1); i++ ) lesUsagers[i] = lesUsagers[i+1]; nbrElems--; return usager; } // ToString des usagers char* listeUsagerToString () { if ( nbrElems == 0 ) return "Il n'y a aucun usager presentement!"; char* usager1 = donnerUsagerNom(lesUsagers[0]); char* reponse = (char*) malloc ( ((int) strlen(usager1) + 1) * sizeof(char) ); sprintf (reponse, "%s", usager1); int i; for ( i=1; i < nbrElems; i++ ) { int l = (int) strlen (reponse); char* usager = donnerUsagerNom(lesUsagers[i]); reponse = (char*) realloc ( reponse, ((l + (int) strlen(usager) + 1) * sizeof(char)) ); sprintf (reponse, "%s %s", reponse, usager); } return reponse; } // Donner le nom d'un usager ayant un certain socket descriptor char* listeUsagerTrouverNom (int nsd) { int i; for ( i=0; i < nbrElems; i++ ) { if ( donnerUsagerNsd(lesUsagers[i]) == nsd ) return donnerUsagerNom (lesUsagers[i]); } return "Aucun usager n'a ce numero de socket!"; } // Donner le socket descriptor d'un usager int listeUsagerTrouverNsd (char* nom) { int i; for ( i=0; i < nbrElems; i++ ) { if ( !strcmp(donnerUsagerNom(lesUsagers[i]),nom) ) return donnerUsagerNsd (lesUsagers[i]); } return -1; }