Chat is this real??

Cartouche

Champ Valeur
Auteur·e Élise
Édition 2024-04-03
Durée 2~3 semaines
Taille des équipes 3~4 personnes
login des auteurs·rices dans author.txt
Rendu via git, dépôt $YEAR_chat, droits en lecture à delivery_collector
Compilation make avec règles all, clean, fclean, re
Binaires chat_server : exécutable
ut.out : tests unitaires

Correction

Barème

Critère Points
basic: choix du port d’écoute et fallback automatique 2
basic: choix nombre de client max 1
basic: relais des messages aux autres 4
basic: déconnexions EOF 3
basic: déconnexions logout 2
relais des messages préfixé 2
gestion des pseudos 3
nombre variable de clients 4
commande /wisp 3
commande /kick 3
Total des points accessibles 26
Note Maximale 20
Malus par ligne d’erreur de norme -0.5
Malus pour un dépôt sale -5
Malus mauvaise gestion de la mémoire et des resources 0 à -6

Conditions

  • Soutenance avec diapositives (PPT ou équivalent), exemple plan :
    • Rappel du sujet
    • Rôles
    • Méthodologie
    • Difficultés principales
    • Architecture, comment votre code est organisé
    • Fonctionnalités implémentées
    • Démonstration
    • Conclusion :
      • ce que vous avez appris
      • que feriez-vous différemment
      • etc.
  • Toute fonctionnalité non présentée est considérée comme non-implémentée.

Règlement de projet

Prévention de la triche

La réalisation de cet exercice est assujettie aux règles en vigueur dans l’école en matière de triche et de normalisation. Tricher vous expose à de graves sanctions.

Vous devez respecter les règles de normalisation suivantes : https://git.ecole-89.com/eriizu/coding_style/src/branch/main/norm.md

Le non-respect de la norme vous fera perdre une partie ou la totalité des points qui auraient pu être acquis, sur l’ensemble du rendu.

Fichiers à rendre et compilation

La structure de votre dépôt doit être la suivante :

  • Makefile à la racine de votre dépôt
  • fichiers *.c dans src/
  • fichiers *.h dans include/
  • fichiers *.c de tests unitaires criterion dans test/

Votre Makefile doit au minimum avoir les règles all, clean, fclean et re

Vous devez aussi avoir une recette par binaire demandé dans le cartouche de sujet. La recette all doit dépendre de celles de binaires demandés.

Tests unitaires

Chacune de vos fonctions doit avoir des tests unitaires associés.

Fonctions autorisées et interdites

Pour tout le sujet, les fonctions autorisées sont :

  • write
  • malloc
  • free
  • strerror
  • socket
  • bind
  • listen
  • htons
  • inet_addr
  • placeholder
  • memset
  • setsockopt

Consignes

Fonctionnalités obligatoires – basics

Implémentez un serveur de clavardage (de discussion par écrit). Il doit prendre en argument les options :

  • -p PORT pour choisir le port sur lequel écouter ;
  • -f pour permettre le fallback vers un autre port si l’original n’est pas disponible ;
  • -l CLIENT_LIMIT pour choisir le nombre maximum de client.

Lorsqu’un client envoie un message au serveur, le serveur doit l’envoyer à tous les autres clients (mais pas à son expéditeur).

Électives

Choisissez les fonctionnalités que vous préférez implémenter en fonction de vos préférences et du nombre de points qu’elles rapportent parmi la liste suivante :

  • messages préfixés du numéro du client ou de son pseudo (dans le cas où vous avez fait la commande /nick) ;
  • commande /nick : les utilisateurs peuvent choisir un pseudo qui s’affichera dans les préfixes de messages ;
  • nombre variable de client : on peut lancer votre programme sans -l et il gérera un nombre virtuellement infini de client ;
  • commande /wisp : les utilisateurs peuvent envoyer un message à une personne précise ;
  • commande /kick : un utilisateur peut en déconnecter un autre.

Bonus

Vous pouvez implémenter davantage de fonctionnalités de votre choix, leur valeur en point sera déterminée après votre rendu et votre passage en soutenance. L’implémentation d’un bonus ne peut pas être une excuse pour une fonctionnalité obligatoire ou elective que ne fonctionne plus.