Théorie: notion de message #
Définir et déclarer un message #
-
Le frontal et le dorsal communique à travers des messages
-
En
Ntro
, un message est une classe qui hérite deMessageNtro
, p.ex.public class MsgAjouterRendezVous extends Message<MsgAjouterRendezVous> { private Joueur premierJoueur; public Joueur getPremierJoueur() { return premierJoueur; } public MsgAjouterRendezVous setPremierJoueur(Joueur premierJoueur) { this.premierJoueur = premierJoueur; return this; } public String ajouterA(ModeleFileAttente fileAttente) { return fileAttente.ajouterRendezVous(premierJoueur); } }
-
On doit aussi déclarer le message, p.ex.
public class ClientPong implements NtroAppFx { // ... @Override public void registerMessages(MessageRegistrar registrar) { registrar.registerMessage(MsgAjouterRendezVous.class); }
-
NOTE: le message est envoyé sur le réseau au format
.json
Création et envoi d’un message #
-
On fait un appel
newMessage
pour créer un messageNtro.newMessage(MsgAjouterRendezVous.class);
-
Par convention, on va créer, initialiser et envoyer le message d’un seul coup
Ntro.newMessage(MsgAjouterRendezVous.class) .setPremierJoueur(joueurCourante) .send();
Reception d’un message #
-
Le message est reçu dans une tâche
-
Dans une tâche du dorsal, on va recevoir le message explicitement. P.ex.
tasks.task("ajouterRendezVous") .waitsFor(message(MsgAjouterRendezVous.class)) .executes(inputs -> { MsgAjouterRendezVous msgAjouterRendezVous = inputs.get(message(MsgAjouterRendezVous.class)); // ... });
- la tâche va s’exécuter à chaque fois qu’on reçoit un message de type
MsgAjouterRendezVous
- la tâche va s’exécuter à chaque fois qu’on reçoit un message de type
-
Dans une tâche du frontal, on reçoit deux types de messages
- l’observation d’un modèle (qui implicitement est un message transitant par le réseau)
- les messages d’autres joueurs dans le cas d’une partie réseau
Implantation client/serveur #
-
Si le dorsal et le frontal sont les deux dans le client, on a:
- chaque message est conservé dans une file d’attente
- dès que possible, le message est reçu dans une tâche
-
Si le dorsal est sur un serveur (et le frontal sur le client), on a:
- chaque message est d’abord sauvegardé en
.json
- le message est ensuite envoyé sur le réseau
- de l’autre côté, le
.json
est reçu - le message est construit à partir du
.json
- ensuite, le message est reçu dans une tâche
- chaque message est d’abord sauvegardé en
-
NOTES:
- le code réseau est caché dans la libraire
Ntro
- le/la programmeur/programmeuse d’application n’a pas à le faire
- le code réseau est caché dans la libraire