mirror of
https://github.com/yoboujon/tsock.git
synced 2025-06-08 05:50:50 +02:00
231 lines
No EOL
7 KiB
C
231 lines
No EOL
7 KiB
C
#ifndef HEADER_BAL
|
|
#define HEADER_BAL
|
|
|
|
#include "tsock.h"
|
|
|
|
/**
|
|
* @brief Fonction de test pour les différentes primitive de bal.h
|
|
* Inutilisée sur le programme final.
|
|
*
|
|
* @return int -> 0 si réussite
|
|
*/
|
|
int bal(void);
|
|
|
|
/**
|
|
* @struct messageBAL
|
|
* @brief definition de la structure d'un message BAL
|
|
*
|
|
* @var messageBAL::data
|
|
* Messgae sous forme d'un tableau de caractère
|
|
* @var messageBAL::tailleData
|
|
* Taille du message
|
|
* @var messageBAL::idEmetteur
|
|
* Numéro de l'émetteur qui a envoyé le message
|
|
*/
|
|
typedef struct{
|
|
char *data;
|
|
int tailleData;
|
|
int idEmetteur;
|
|
}messageBAL;
|
|
|
|
/**
|
|
* @struct elementMessage
|
|
* @brief Element dans une liste de Messages
|
|
*
|
|
* @var elementMessage::messageBALActuel
|
|
* Pointeur vers le message de l'élément
|
|
* @var elementMessage::suiv
|
|
* Pointeur vers le prochain élément
|
|
*/
|
|
struct elementMessage{
|
|
messageBAL * messageBALActuel;
|
|
struct elementMessage * suiv;
|
|
};
|
|
|
|
/**
|
|
* @struct listeMessage
|
|
* @brief Liste d'éléments messages
|
|
*
|
|
* @var listeMessage::debut
|
|
* Pointeur vers le premier élément
|
|
* @var listeMessage::courant
|
|
* Pointeur vers l'élément sélectionné
|
|
* @var listeMessage::fin
|
|
* Pointeur vers l'élément final
|
|
*/
|
|
struct listeMessage{
|
|
struct elementMessage * debut;
|
|
struct elementMessage * courant;
|
|
struct elementMessage * fin;
|
|
int nbMessages;
|
|
};
|
|
|
|
/**
|
|
* @struct BAL
|
|
* @brief definition de la structure d'une Boite aux Lettres
|
|
*
|
|
* @var BAL::idRecepteur
|
|
* Numéro du recepteur ayant reçu les messages
|
|
* @var BAL::actualMessages
|
|
* Liste pointant sur les messages reçus
|
|
*/
|
|
typedef struct{
|
|
int idRecepteur;
|
|
struct listeMessage * actualMessages;
|
|
}BAL;
|
|
|
|
/**
|
|
* @struct elementBAL
|
|
* @brief Element dans une liste de Messages
|
|
*
|
|
* @var elementBAL::BALActuel
|
|
* Pointeur vers la boite aux lettres de l'élément
|
|
* @var elementBAL::suiv
|
|
* Pointeur vers le prochain élément
|
|
*/
|
|
struct elementBAL{
|
|
BAL * BALActuel;
|
|
struct elementBAL * suiv;
|
|
};
|
|
|
|
/**
|
|
* @struct listeBAL
|
|
* @brief Liste d'éléments BAL
|
|
*
|
|
* @var listeBAL::debut
|
|
* Pointeur vers le premier élément
|
|
* @var listeBAL::courant
|
|
* Pointeur vers l'élément sélectionné
|
|
* @var listeBAL::fin
|
|
* Pointeur vers l'élément final
|
|
*/
|
|
struct listeBAL{
|
|
struct elementBAL * debut;
|
|
struct elementBAL * courant;
|
|
struct elementBAL * fin;
|
|
};
|
|
|
|
/**
|
|
* @brief Permet l'initialisation d'une struture messageBAL avec un message et un idEmetteur donné.
|
|
*
|
|
* @param data char*, chaîne de caractère de la donnée.
|
|
* @param idEmetteur int, numéro de l'émetteur du message.
|
|
* @return messageBAL* message initialisé avec les paramètres donnés.
|
|
*/
|
|
messageBAL * creeMessage(char *data,int idEmetteur);
|
|
|
|
/**
|
|
* @brief Initialise la structure elementMessage avec un malloc.
|
|
* L'élément crée renvoi vers une adresse NULL.
|
|
*
|
|
* @return struct elementMessage* element initialisé
|
|
*/
|
|
struct elementMessage * initElementMessage(void);
|
|
|
|
/**
|
|
* @brief Initialise plusieurs éléments (debut,courant et fin) avec initElementMessage().
|
|
*
|
|
* @return struct listeMessage* liste de message NULL mais alloué.
|
|
*/
|
|
struct listeMessage * initListeMessage(void);
|
|
|
|
/**
|
|
* @brief Ajoute un message dans la liste de message :
|
|
* Mets à jour le pointeur courant ainsi que debut.
|
|
*
|
|
* @param listeActuel struct listeMessage *,la liste à modifier.
|
|
* @param leMessage messageBAL*, pointeur sur le message à ajouter à la liste.
|
|
*/
|
|
void ajoutListeMessage(struct listeMessage * listeActuel,messageBAL * leMessage);
|
|
|
|
/**
|
|
* @brief Affiche l'intégralité des Messages pour tous les Emetteurs.
|
|
*
|
|
* @param listeActuel struct listeMessage, liste à afficher.
|
|
*/
|
|
void afficheListeMessage(struct listeMessage listeActuel);
|
|
|
|
/**
|
|
* @brief Permet l'initialisation d'une struture BAL avec un idRecepteur et un messageRecepteur donné.
|
|
*
|
|
* @param idRecepteur int, numéro du recepteur.
|
|
* @param messageRecepteur struct listeMessage*, liste des messages du recepteur.
|
|
* @return BAL* boite aux lettres initialisée avec les paramètres donnés.
|
|
*/
|
|
BAL * creerBAL(int idRecepteur, struct listeMessage * messageRecepteur);
|
|
|
|
/**
|
|
* @brief Initialise la structure elementBAL avec un malloc.
|
|
* L'élément crée renvoi vers une adresse NULL.
|
|
*
|
|
* @return struct elementBAL* element initialisé
|
|
*/
|
|
struct elementBAL * initElementBAL(void);
|
|
|
|
/**
|
|
* @brief Initialise plusieurs éléments (debut,courant et fin) avec initElementBAL().
|
|
*
|
|
* @return struct listeBAL liste de Boite aux lettres NULLes mais allouées.
|
|
*/
|
|
struct listeBAL initListeBAL(void);
|
|
|
|
/**
|
|
* @brief Ajoute une boite aux letres dans la liste de BAL :
|
|
* Mets à jour le pointeur courant ainsi que debut.
|
|
*
|
|
* @param listeActuel struct listeBAL *,la liste à modifier.
|
|
* @param leMessage BAL*, pointeur sur la boite aux lettres à ajouter à la liste.
|
|
*/
|
|
void ajoutListeBAL(struct listeBAL * listeActuel,BAL * laBoiteAuxLettres);
|
|
|
|
/**
|
|
* @brief Affiche l'intégralité de la Boite Aux Lettres pour tous les Récepteurs.
|
|
* Utilisation de la fonction afficheListeMessage
|
|
*
|
|
* @param listeActuel struct listeBAL, liste à afficher.
|
|
*/
|
|
void afficheListeBAL(struct listeBAL listeActuel);
|
|
|
|
/**
|
|
* @brief Permet de vérifier si un idRecepteur existe dans une liste de Boite Aux Lettres donnée
|
|
* Ne modifie pas le pointeur courant mais parcours toute la liste. Modifie le boolRetour pour savoir si c'est vrai ou non.
|
|
* Renvoi l'élément correspondant si c'est le cas. Renvoi un élément vide sinon.
|
|
*
|
|
* @param listeActuel struct listeBAL, la liste à vérifier
|
|
* @param idRecepteur int, idRecepteur à vérifier.
|
|
* @param boolRetour bool*, 1->Element retourné trouvé dans la liste, 0->Element NULL, non trouvé dans la liste
|
|
* @return struct elementBAL*, element trouvé si dans la liste, NULL sinon.
|
|
*/
|
|
struct elementBAL * existInListBAL(struct listeBAL listeActuel, int idRecepteur, bool * boolRetour);
|
|
|
|
/**
|
|
* @brief Crée un nouveau message dans la liste de Boite Aux Lettres.
|
|
* Utilisation de la fonction existInListBAL() -> Créer une nouvelle BAL si le recepteur n'existe pas.
|
|
*
|
|
* @param b struct listeBAL*, la liste à modifier.
|
|
* @param idEmetteur int, le numéro de l'émetteur qui a envoyé le message.
|
|
* @param idRecepteur int, le numéro du recepteur qui va recevoir ce message.
|
|
* @param data char*, le message reçu.
|
|
*/
|
|
void nouveauMessage(struct listeBAL * b,int idEmetteur,int idRecepteur,char *data);
|
|
|
|
/**
|
|
* @brief Récupère la liste de message d'un recepteur précis
|
|
* Attention de vérifier si la liste est vide -> si c'est le cas,
|
|
* alors le recepteur n'existe pas.
|
|
*
|
|
* @param b struct listeBAL, liste de BoîteAuxLettres
|
|
* @param idRecepteur int, id du recepteur
|
|
* @return struct listeMessage*
|
|
*/
|
|
struct listeMessage * getMessages(struct listeBAL b, int idRecepteur);
|
|
|
|
/**
|
|
* @brief [WIP] Permet de renvoyer les trames de chaque messages présentent dans la boîte aux lettres
|
|
* suivant le protocole de l'application.
|
|
*
|
|
* @param l struct listeMessage, la liste à envoye via TCP.
|
|
*/
|
|
void formatListMessage(struct listeMessage l);
|
|
|
|
#endif |