Prise en main : premier projet en 30 minutes
Sans serveur. Un bouton qui émet click, une pile qui compte les assiettes et publie plates_count. À la fin, une erreur volontaire pour voir le broker refuser un payload.
Tout le projet est dans tutos/projets/assiettes (téléchargement). Chaque étape montre le fichier complet, puis ce que dit la console.
Copier fw/
Le framework tient en deux fichiers, génériques, qu'on ne touche jamais :
engine.js(l'interpréteur du catalogue) etbroker.js(l'aiguilleur). Copiez-les depuis le chat ou depuis le squelette vide.assiettes/ index.html la composition fw/engine.js jamais modifié fw/broker.js jamais modifié catalogs/catalog.js les contrats components/plates_button.js components/plates_stack.js
Écrire le catalogue
Deux contrats.
clickn'a aucun champ, mais il est déclaré : un payload vide est valide, un payload avec un champ ne l'est pas. Lesexamplesetcounterexamplesprouvent le contrat,node test_engine.jsles rejoue.$ node test_engine.js test_engine : catalogue prouvéÉcrire le bouton
Il émet
click, ne reçoit rien, et ne sait pas qui l'écoute.Écrire la pile
Elle reçoit
click, compte, affiche, et publieplates_count. Remarquez lepublishfait depuishandleMessage: il est mis en file, livré après le message courant.Composer dans index.html
Un broker construit sur le catalogue, deux objets construits avec leur support. C'est le seul endroit qui connaît les deux composants. Puis l'audit, une fois tout monté.
Ouvrir le projet. Cliquez deux fois : la pile affiche « 2 assiettes ». La console dit :
AUDIT (orphan_emit): plates_count is emitted by stack, has no local subscriber and crosses no channelL'audit a raison : personne n'écoute encore
plates_count. Pendant la construction, un orphelin est normal. Le tuto 2 lui donne un abonné.Lancer l'audit, cocher le mode verbeux
Cochez « broker verbeux » puis cliquez : chaque réception, validation et livraison est tracée.
INFO (broker): received from button: {"click":{}} INFO (broker): delivering click v1 to stack INFO (stack): reçoit {"click":{}} INFO (broker): received from stack: {"plates_count":{"count":3}}L'erreur volontaire
Le bouton « émettre un payload invalide » publie
{ click: { who: "moi" } }. Le broker refuse, liste les violations, et la pile ne bouge pas :ERROR (broker): click v1 r0 from button invalid — dropped: - who: field not declared in catalog (R1)C'est la règle du message et de son contrat : tout champ est déclaré, un champ en trop est une violation. L'erreur est bruyante mais n'arrête rien.
Un catalogue en pure donnée, deux composants qui ne se connaissent pas, une composition en un seul endroit, un audit en fin de montage. C'est tout fwtozza. Le reste, c'est la même chose avec un serveur en face.