Lien vers Git: https://github.com/Sagbyy/pizza-factory
- Réaliser une interface graphique ou un dashboard (TUI/GUI) pour suivre l'état de la chaîne de production.
- Ajouter une intégration continue (CI) pour tester votre code automatiquement: (fmt/check/test/doc) sur GitHub Actions
- Réduire au maximum les unwrap(), expect() et les variables mutables (mut) ou les clones (clone()).
Ce projet implémente un agent et un client compatibles sur le thème production de pizzas.
Le système repose sur:
- un plan de controle UDP (gossip, presence, decouverte),
- un plan de donnees TCP (commandes client, forwarding inter-noeuds, reponses).
Le protocole a été reconstruit par reverse-engineering a partir de captures réseau et validé par des tests d'interoperabilité multi-noeuds.
- Membres:
- Herman
- Van Anh
- Salahe-Eddine
- Répartition initiale:
- Reverse-engineering et spécification
- Services reseau UDP/TCP
- Client CLI, tests, documentation
- Méthode de travail:
- Branches courtes, revues de code, validation locale
cargo fmt,cargo check,cargo test.
- Branches courtes, revues de code, validation locale
- Wireshark/tcpdump pour capturer et inspecter les trames.
- Decodage CBOR pour identifier les structures de messages.
- UDP transporte les messages de decouverte et de presence (
Announce,Ping,Pong). - TCP transporte les commandes applicatives (
list_recipes,get_recipe,order, payload process). - Validation par captures pcap et execution de scénarios reproductibles.
Captures disponibles:
doc/pcap/starting-peer-annouced.pcapdoc/pcap/client-command-2.pcapng- Frames sous forme yaml pour un flow UDP + un flow TCP de Wireshark.
- Module
protocol: modeles de messages + sérialisation/desérialisation CBOR. - Module
network::udp: boucle gossip, gestion presence et table des pairs. - Module
network::tcp: framing longueur-prefixée pour trames TCP. - Module
server::tcp+server::handlers: endpoint serveur et logique metier. - Module
recipe: parsing + flatten des etapes. - Module
cli: commandesstart,start-tui,client.
- Concurrence avec
std::threadetArc/RwLock. - Pas de runtime async.
serde+ciboriumpour le format binaire.clappour le CLI.uuidpour les identifiants de commandes.
- Démarrage noeud avec capacités, peers bootstrap et fichier de recettes.
- Service gossip UDP:
- annonces de capacités/recettes,
- pings/pongs de présence,
- mise a jour de l'état partage des pairs.
- Service TCP:
ListRecipes,GetRecipe,Order,ProcessPayload.
- Forwarding inter-noeuds:
- Si la recette/action n'est pas locale, le noeud sélectionne des peers annoncés via gossip et relaie la requete TCP.
- Commandes CLI:
list-recipesget-recipe <RECIPE>order <RECIPE>
- Affichage des recettes locales et distantes connues.
Ouvrir 3 terminaux a la racine du projet.
Terminal 1:
cargo run -- start --host 127.0.0.1:8000 --capabilities MakeDough,Bake --recipes-file src/recipes/examples.recipesTerminal 2:
cargo run -- start --host 127.0.0.1:8001 --capabilities Slice --peer 127.0.0.1:8000Attendre 2 a 4 secondes (propagation gossip), puis Terminal 3:
cargo run -- client --peer 127.0.0.1:8001 list-recipes
cargo run -- client --peer 127.0.0.1:8001 get-recipe Margherita
cargo run -- client --peer 127.0.0.1:8001 order MargheritaRésultat attendu:
- 8001 connait les recettes annoncées par 8000,
- 8001 peut récuperer la recette et passer commande en relayant vers 8000,
- le client recoit la reponse finale depuis 8001.
- Formatage:
cargo fmt - Vérification compilation:
cargo check - Tests:
cargo test - Documentation:
cargo doc --open
- Première integration TCP/UDP avec blocage de boucle startup.
- Ajustements progressifs du forwarding (order puis get_recipe/payload).
- Ajustement de la boucle gossip pour eviter les blocages de reception.
- L'état partage gossip doit etre explicitement exploité par les handlers TCP.
- Les tests de framing et de bout en bout évitent les regressions silencieuses.
- Une documentation protocolaire explicite accélère les corrections d'interoperabilité.
- Politique de sélection de peer basique (premier peer qui repond).
- Gestion d'erreur reseau perfectible (retry/backoff avancé).
- Langage Rust.
- Bibliotheque standard privilegiée.
- Concurrence via threads std et primitives std.
- Crates utilisees:
clap,serde,ciborium,uuid.
- Herman: modèles de données + gossip UDP + CI + log.
- Van Anh: Reverse-Engineering + Spec Protocole + Parseur de recette + handlers TCP.
- Salahe-Eddine: Reverse-Engineering + Spec Protocole + client CLI + client TUI + CI.
- Reverse engineering:
REVERSE-ENGINEERING.md - Specification protocole:
PROTOCOLE-SPEC.md - Captures reseau:
doc/pcap/* - Commandes de test rapide:
src/cli/command.txt - Pipeline CI: (fmt/check/test/doc) sur GitHub Actions. La configuration des étapes la pipeline:
.github/workflows/rust.yml
