diff --git a/header/bal.h b/header/bal.h index 23bacce..d97310e 100644 --- a/header/bal.h +++ b/header/bal.h @@ -6,7 +6,7 @@ typedef struct{ char *data; int tailleData; - int idEmeteur; + int idEmetteur; }messageBAL; struct elementMessage{ @@ -20,10 +20,35 @@ struct listeMessage{ struct elementMessage * fin; }; -messageBAL * creeMessage(char *data,int idEmeteur); +typedef struct{ + int idRecepteur; + struct listeMessage * actualMessages; +}BAL; + +struct elementBAL{ + BAL * BALActuel; + struct elementBAL * suiv; +}; + +struct listeBAL{ + struct elementBAL * debut; + struct elementBAL * courant; + struct elementBAL * fin; +}; + +messageBAL * creeMessage(char *data,int idEmetteur); struct elementMessage * initElementMessage(void); -struct listeMessage initListeMessage(void); -void ajoutListe(struct listeMessage * listeActuel,messageBAL * leMessage); +struct listeMessage * initListeMessage(void); +void ajoutListeMessage(struct listeMessage * listeActuel,messageBAL * leMessage); void afficheListeMessage(struct listeMessage listeActuel); +BAL * creerBAL(int idRecepteur, struct listeMessage * messageRecepteur); +struct elementBAL * initElementBAL(void); +struct listeBAL initListeBAL(void); +void ajoutListeBAL(struct listeBAL * listeActuel,BAL * laBoiteAuxLettres); +void afficheListeBAL(struct listeBAL listeActuel); + +struct elementBAL * existInListBAL(struct listeBAL listeActuel, int idRecepteur, bool * boolRetour); +void nouveauMessage(struct listeBAL * b,int idEmetteur,int idRecepteur,char *data); + #endif \ No newline at end of file diff --git a/header/tsock.h b/header/tsock.h index e67c1a2..c0037ec 100644 --- a/header/tsock.h +++ b/header/tsock.h @@ -12,6 +12,7 @@ #include #include #include +#include void setNbMessage(int * nb, int source); void printInfo(int source, int isTCP, int nbMessage, int taille, int portNumber, char ipAddress[]); diff --git a/src/bal.c b/src/bal.c index 7b8b94e..f74ca0b 100644 --- a/src/bal.c +++ b/src/bal.c @@ -1,18 +1,22 @@ #include "../header/bal.h" int main(void){ - struct listeMessage l = initListeMessage(); - messageBAL * messageBAL = creeMessage("Renvoi moi mon pdf asap. -Simon",1); - ajoutListe(&l,messageBAL); - afficheListeMessage(l); + struct listeBAL boiteAuxLettres = initListeBAL(); + nouveauMessage(&boiteAuxLettres,2,1,"Renvoi moi mon pdf asap. -Simon"); + nouveauMessage(&boiteAuxLettres,2,1,"Mon anniversaire c'est demain !"); + nouveauMessage(&boiteAuxLettres,1,2,"Ok joyeux anniv alors !"); + nouveauMessage(&boiteAuxLettres,1,2,"ok c'est fait. -Yohan"); + nouveauMessage(&boiteAuxLettres,3,1,"C'est trop, yohan me soule"); + nouveauMessage(&boiteAuxLettres,1,3,"Yoyo l'asticot"); + afficheListeBAL(boiteAuxLettres); return 0; } -messageBAL * creeMessage(char *data,int idEmeteur) +messageBAL * creeMessage(char *data,int idEmetteur) { messageBAL * message = malloc(sizeof(messageBAL)); - message->idEmeteur=idEmeteur; + message->idEmetteur=idEmetteur; message->tailleData=strlen(data); message->data=(char*)malloc(sizeof(char)*message->tailleData); strcpy(message->data,data); @@ -27,16 +31,16 @@ struct elementMessage * initElementMessage(void) return returnElement; } -struct listeMessage initListeMessage(void) +struct listeMessage * initListeMessage(void) { - struct listeMessage l; - l.debut=initElementMessage(); - l.fin=initElementMessage(); - l.courant=initElementMessage(); + struct listeMessage * l=malloc(sizeof(struct listeMessage)); + l->debut=initElementMessage(); + l->fin=initElementMessage(); + l->courant=initElementMessage(); return l; } -void ajoutListe(struct listeMessage * listeActuel,messageBAL * leMessage) +void ajoutListeMessage(struct listeMessage * listeActuel,messageBAL * leMessage) { struct elementMessage * elementActuel = malloc(sizeof(struct elementMessage)); elementActuel->messageBALActuel=leMessage; @@ -54,4 +58,86 @@ void afficheListeMessage(struct listeMessage listeActuel) printf("%s\n",elementCourant->messageBALActuel->data); elementCourant=elementCourant->suiv; } +} + +BAL * creerBAL(int idRecepteur, struct listeMessage * messageRecepteur) +{ + BAL * boiteAuxLettres = malloc(sizeof(BAL)); + + boiteAuxLettres->idRecepteur=idRecepteur; + boiteAuxLettres->actualMessages=messageRecepteur; + return boiteAuxLettres; +} + +struct elementBAL * initElementBAL(void) +{ + struct elementBAL * returnElement = malloc(sizeof(struct elementBAL)); + struct listeMessage * lVide = initListeMessage(); + returnElement->BALActuel = creerBAL(0,lVide); + returnElement->suiv = NULL; + return returnElement; +} + +struct listeBAL initListeBAL(void) +{ + struct listeBAL l; + l.debut=initElementBAL(); + l.fin=initElementBAL(); + l.courant=initElementBAL(); + return l; +} + +void ajoutListeBAL(struct listeBAL * listeActuel,BAL * laBoiteAuxLettres) +{ + struct elementBAL * elementActuel = malloc(sizeof(struct elementBAL)); + elementActuel->BALActuel=laBoiteAuxLettres; + elementActuel->suiv=listeActuel->courant; + listeActuel->debut=elementActuel; + listeActuel->courant=elementActuel; +} + +void afficheListeBAL(struct listeBAL listeActuel) +{ + struct elementBAL * elementFinal = listeActuel.fin; + struct elementBAL * elementCourant = listeActuel.courant; + while(elementCourant->suiv != elementFinal->suiv) + { + printf("Recepteur : %d\n",elementCourant->BALActuel->idRecepteur); + afficheListeMessage(*(elementCourant->BALActuel->actualMessages)); + elementCourant=elementCourant->suiv; + } +} + +struct elementBAL * existInListBAL(struct listeBAL listeActuel, int idRecepteur, bool * boolRetour) +{ + struct elementBAL * elementFinal = listeActuel.fin; + struct elementBAL * elementCourant = listeActuel.courant; + while(elementCourant->suiv != elementFinal->suiv) + { + if(elementCourant->BALActuel->idRecepteur == idRecepteur) + { + *boolRetour = true; + return elementCourant; + } + elementCourant=elementCourant->suiv; + }; + *boolRetour = false; + return elementFinal; +} + +void nouveauMessage(struct listeBAL * b,int idEmetteur,int idRecepteur,char *data) +{ + bool testExistInList; + struct elementBAL * elementNouveauMessage = existInListBAL(*b,idRecepteur,&testExistInList); + printf("testExistInList = %d\n",testExistInList); + if(testExistInList) + { + ajoutListeMessage(elementNouveauMessage->BALActuel->actualMessages,creeMessage(data,idEmetteur)); + } + else + { + struct listeMessage * newListMessage = initListeMessage(); + ajoutListeMessage(newListMessage,creeMessage(data,idEmetteur)); + ajoutListeBAL(b,creerBAL(idRecepteur,newListMessage)); + } } \ No newline at end of file