Optionnel) ajouter les bons joueurs à la partie #
Rejoindre un rendez-vous (créer un rendez-vous complet) #
-
Dans
ModeleFileAttente
, ajoutercreerRendezVousComplet
public class ModeleFileAttente implements Model, WatchJson, WriteObjectGraph { // ... // s'assurer d'avoir private int indiceRendezVousParId(String idRendezVous) { int indice = -1; for(int i = 0; i < rendezVousDansOrdre.size(); i++) { if(rendezVousDansOrdre.get(i).siIdEst(idRendezVous)) { indice = i; break; } } return indice; } // ajouter public RendezVousComplet creerRendezVousComplet(String idRendezVous, Joueur deuxiemeJoueur) { int indiceRendezVous = indiceRendezVousParId(idRendezVous); RendezVous rendezVous = rendezVousDansOrdre.get(indiceRendezVous); RendezVousComplet rendezVousComplet = null; if(rendezVous != null) { rendezVousComplet = rendezVous.creerRendezVousComplet(deuxiemeJoueur); rendezVousDansOrdre.set(indiceRendezVous, rendezVousComplet); } return rendezVousComplet; } }
-
Créer le
MsgRejoindreRendezVous
public class MsgRejoindreRendezVous extends Message<MsgRejoindreRendezVous> { private String idRendezVous; private Joueur joueur; public MsgRejoindreRendezVous setIdRendezVous(String idRendezVous) { this.idRendezVous = idRendezVous; return this; } public MsgRejoindreRendezVous setJoueur(Joueur joueur) { this.joueur = joueur; return this; } public RendezVousComplet appliquerA(ModeleFileAttente fileAttente) { return fileAttente.creerRendezVousComplet(idRendezVous, joueur); } }
-
Déclarer le message dans
Declarations
public class Declarations { public static void declarerMessages(MessageRegistrar registrar) { // ... // ajouter registrar.registerMessage(MsgRejoindreRendezVous.class); }
-
Sur un rendez-vous partiel, envoyer
MsgRejoindreRendezVous
public class FragmentRendezVous extends ViewFx { // ... // s'assurer d'avoir protected Button getBoutonDebuterPartie() { return boutonDebuterPartie; } // s'assurer d'avoir public void memoriserIdRendezVous(String idRendezVous) { // ... // ajouter installerMsgRejoindreRendezVous(idRendezVous); } private void installerMsgRejoindreRendezVous(String idRendezVous) { boutonDebuterPartie.setOnAction(evtFx -> { Ntro.session(SessionPong.class) .envoyerMsgRejoindreRendezVous(idRendezVous); }); }
-
Sur un rendez-vous complet, afficher la partie
public class FragmentRendezVousComplet extends FragmentRendezVous { // ... @Override public void initialize() { super.initialize(); // ... // ajouter installerEvtAfficherPartie(); } private void installerEvtAfficherPartie() { getBoutonDebuterPartie().setOnAction(evtFx -> { Ntro.newEvent(EvtAfficherPartie.class) .trigger(); }); }
-
Dans
SessionPong
, ajouter la méthodeenvoyerMsgRejoindreRendezVous
public class SessionPong extends Session<SessionPong> { // ... // ajouter public SessionPong envoyerMsgRejoindreRendezVous(String idRendezVous) { Ntro.newMessage(MsgRejoindreRendezVous.class) .setIdRendezVous(idRendezVous) .setJoueur(MaquetteJoueurs.joueurAleatoire(this.sessionId())) .send(); return this; }
Ajouter les joueurs dans la partie #
-
Dans
ModelePartie
, ajouterpublic class ModelePartie implements Model { // s'assurer d'avoir private String idRendezVous = null; // s'assurer d'avoir private Map<Position, InfoJoueur> infoJoueurParPosition = new HashMap<>(); // ajouter public ModelePartie setIdRendezVous(String idRendezVous) { this.idRendezVous = idRendezVous; return this; } // ajouter public ModelePartie ajouterJoueur(Position position, Joueur joueur) { infoJoueurParPosition.put(position, new InfoJoueur(joueur)); return this; }
Créer la partie (en réaction à la création d’un rendez-vous complet) #
-
Créer le
MsgCreerPartie
public class MsgCreerPartie extends Message<MsgCreerPartie> { private String idRendezVous; private Joueur premierJoueur; private Joueur deuxiemeJoueur; public MsgCreerPartie setIdRendezVous(String idRendezVous) { this.idRendezVous = idRendezVous; return this; } public MsgCreerPartie setPremierJoueur(Joueur premierJoueur) { this.premierJoueur = premierJoueur; return this; } public MsgCreerPartie setDeuxiemeJoueur(Joueur deuxiemeJoueur) { this.deuxiemeJoueur = deuxiemeJoueur; return this; } public void appliquerA(ModelePartie partie) { partie.setIdRendezVous(idRendezVous) .ajouterJoueur(Position.GAUCHE, premierJoueur) .ajouterJoueur(Position.DROITE, deuxiemeJoueur); } }
-
Déclarer le message dans
Declarations
public class Declarations { public static void declarerMessages(MessageRegistrar registrar) { // ... // ajouter registrar.registerMessage(MsgCreerPartie.class); }
-
Dans
ModifierFileAttente
, ajouterpublic class ModifierFileAttente { public static void creerTaches(BackendTasks tasks) { tasks.taskGroup("ModifierFileAttente") .waitsFor(model(ModeleFileAttente.class)) .contains(subTasks -> { // ... // s'assurer d'avoir rejoindreRendezVous(subTasks); // ajouter envoyerMsgCreerPartie(subTasks); }); } private static void rejoindreRendezVous(BackendTasks subTasks) { subTasks.task("rejoindreRendezVous") .waitsFor(model(ModeleFileAttente.class)) .waitsFor(message(MsgRejoindreRendezVous.class)) // modifier .executesAndReturnsValue(inputs -> { MsgRejoindreRendezVous msgRejoindreRendezVous = inputs.get(message(MsgRejoindreRendezVous.class)); ModeleFileAttente fileAttente = inputs.get(model(ModeleFileAttente.class)); RendezVousComplet rendezVousComplet = msgRejoindreRendezVous.appliquerA(fileAttente); // modifier return rendezVousComplet; }); } // ajouter private static void envoyerMsgCreerPartie(BackendTasks subTasks) { subTasks.task("envoyerMsgCreerPartie") .waitsFor("rejoindreRendezVous") .executes(inputs -> { RendezVousComplet rendezVousComplet = inputs.get("rejoindreRendezVous"); if(rendezVousComplet != null) { rendezVousComplet.envoyerMsgCreerPartie(); } }); }
-
Dans
ModifierPartie
, ajouterpublic class ModifierPartie { public static void creerTaches(BackendTasks tasks) { tasks.taskGroup("ModifierPartie") .waitsFor(model(ModelePartie.class)) .contains(subTasks -> { // ajouter creerPartie(subTasks); // ... }); } // ajouter private static void creerPartie(BackendTasks subTasks) { subTasks.task("creerPartie") .waitsFor(model(ModelePartie.class)) .waitsFor(message(MsgCreerPartie.class)) .executes(inputs -> { MsgCreerPartie msgCreerPartie = inputs.get(message(MsgCreerPartie.class)); ModelePartie partie = inputs.get(model(ModelePartie.class)); msgCreerPartie.appliquerA(partie); }); }
-
Le graphe de tâche du Dorsal devrait contenir