Contrôle Final 1 – Année 2022/2023
- Durée du CF: 2h
- Tous les documents sont autorisés
- Vous avez à votre disposition le code des fichiers server_code_etudiant.h, et server_code_etudiant.c.
Echauffement (3 points)
Vous disposez de l'arborescence suivante:
1 point
2 points
Expliquez le problème et corrigez la commande permettant de générer l'executable main.
AskGPT (6 points)
2 points
- allouer une zone mémoire de taille 2000 octets
- appeler la fonction chatGPT, puis envoyer la réponse à tous les clients du chat
3 points
Le serveur de chat permet de traiter les requêtes de nombreux clients de manière concurrente. La fonction chat_gpt ne peut toutefois pas traiter plus de 4 requêtes à la fois. Modifiez la fonction process_cmd_askGPT pour assurer que les appels à la fonction chat_gpt respectent cette contrainte.
Si besoin, indiquez les modifications à apporter aux fonctions void server_init() (appelée au lancement du serveur) et void server_finalize() (appelée à la terminaison du serveur).
Fortune (4 points)
Fortune_record (9 pt)
4 points
3 points
Implémentez la fonction void process_cmd_fortune_record(client_t* client, char* param). Cette fonction est appelée quand un utilisateur lance la commande /fortune_record n (où n est un entier). Elle doit enregister les n derniers messages sous la forme d'une seule fortune dans le fichier fortunes.dat.
Cette fonction doit allouer un struct fortune et le remplir avec les n derniers messages envoyés (donc les n premiers éléments de la liste chaînée). Si la liste contient moins de n messages, la fortune est construite à partir de tous les messages de la liste.