diff --git a/trivial-doc/modules/development/pages/composants.adoc b/trivial-doc/modules/development/pages/composants.adoc index e383ff47b7f9ab87a3a53fb935efc2ecd2d7237c..38c175b666e6711d08a10205299747929568a6aa 100644 --- a/trivial-doc/modules/development/pages/composants.adoc +++ b/trivial-doc/modules/development/pages/composants.adoc @@ -20,7 +20,7 @@ include::example$dc-global.puml[] .Un autre exemple -== Composant A +== Composant 1 [plantuml] .... @@ -39,27 +39,26 @@ interface Required sws --() Provided -Required )-- cws +Required ()-- cws @enduml .... -=== Responsabilités du Composant A +=== Responsabilités du Composant 1 -* Serveur : +* Serveur : PlayerServer .Quelques exemples -* Créé tous les objets relatifs au jeu : les joueurs, les cartes, les merveilles et les initialise. * Gère les connections au serveur et les pseudos -* Lorsque tous les joueurs sont prêts, lance la partie et distribue au client ce dont il a besoin : Merveille, cartes au tour 1 -* À chaque tour, il reçoit la liste suivante : Le paquet de cartes non jouées, la carte jouée/déposée sur la merveille/défossée, -le nombre d'argent à ajouter au joueur -* Une fois que tout le monde a envoyé son jeu, envoie à chaque client : ses nouvelles cartes, les cartes jouées depuis le début de la partie de son voisin de gauche et de droite -* Gère les tours de la partie -* Définit le joueur gagnant +* Récupération du pseudo du joueur connecté +* Gestion des connexions et déconnexions des joueurs +* Vérificaiton que le joueur connecté ne l'est pas plusieurs fois +* Pour l'admistrateur : contrôle de l'accès aux joueurs +* Mise à jour des informations du joueurs (victoire - perte) +- === Interfaces fournies -==== Interface A +==== Interface A : GameDesk [TIP] ==== @@ -79,24 +78,77 @@ Utilisez la notation UML pour spécifier la signature de chaque operation de l'i .... include::example$sober.config[] -interface A << Interface >> { - operationA(a: String, b: Integer): Boolean +GameDesk << Interface >> { + + joinGame(gameID : String, userID : String): Boolean + getGameStatus(gameID : String) : String + joinGame(userID : String) : Boolean + joinSpecialGame(userID : String, gameID : STring) : Boolean + startRound(userID : String) : String + connect(pseudo : String, password : String, ip : String, port : Integer) : Boolean + createGame(numberOfPlayers : Integer): String } .... TIP: Si nécessaire, utilisez le langage OCL pour spécifier les pré et post-conditions des opérations. -.Contraintes sur les operations +.Contraintes sur joinGame [source, ocl] ---- -context A::operationA(a: String, b: Integer): Boolean -pre: a.size() > 3 +context A::joinGame(gameID : String, userID : String): Boolean +pre: gameID <> null + userID <> null +post: +-- Pas de postconditions +---- + +.Contraintes sur getGameStatus +[source, ocl] +---- +context A::getGameStatus(gameID : String) : String +pre: gameID <> null + user.isConnected == true + user.isPlayed == true +post: +-- Pas de postconditions +---- + +.Contraintes sur joinGame +[source, ocl] +---- +context A::joinGame(userID : String) : Boolean +pre: userID <> null + user.isConnected() == true + user.isPlayed() == false post: -- Pas de postconditions ---- +.Contraintes sur joinSpecialGame +[source, ocl] +---- +context A::joinSpecialGame(userID : String, gameID : STring) : Boolean +pre: userID <> null + gameID <> null + user.isConnected() == true + user.isPlayed() == false + gameID.isComplete() == false +post: +-- Pas de postconditions +---- + +.Contraintes sur startRound +[source, ocl] +---- +context A::startRound(userID : String) : String +pre: userID <> null + user.isConnected() == true + user.isPlayed() == false +post: +-- Pas de postconditions +---- -==== Interface B +==== Interface B : GameManagement [plantuml] .... @@ -104,8 +156,8 @@ post: 'skinparam CircleColor blue 'skinparam CircledCharacterFontColor blue -interface C as "C" << (I, White) Interface >> { - operation(a: String, b: Integer): Boolean +GameManagement << Interface >> { + createAccoount(email: String, prenom: String, nom: String, birthday : String, mdp : String): Boolean } .... @@ -120,29 +172,64 @@ post: == Composant B +[plantuml] +.... +include::example$sober.config[] +@startuml +left to right direction -[note] -==== -Description de ses responsabilités et de ses interfaces -==== +InitializerGameServer as "Component B" { + portin "WebSockets" as cws + portout "HTTP" as sws +} + +interface Provided + +interface Required + + +sws --() Provided +Required ()-- cws +@enduml +.... + +=== Responsabilités du Composant 1 + +* Serveur : IntializerGameServer + +.Quelques exemples +* Initialiser tous les éléments de jeu +* Création des joueurs +* Créer les objets +* Génération des cartes +* Lancement de la partie +* Faire rentrer tous les joueurs dans la partie + +=== Interfaces fournies === Interface C [plantuml] .... include::example$sober.config[] -interface GameServer << Interface >> { - connect(pseudo: String, password: String, ip: String, port: Integer):Boolean - createGame(numberOfPlayers : Integer): Integer - join(gameId : Integer): Integer -notifyPlayersReady(): String -chooseRole(role: String, playerId: Integer) -resist(numberOfPawns: Integer) -playPlaceCard(playerId: Integer, cardName: String) -playHuntCard(cardName: String) -letGo() -putToken(tokenName: String, cardNames: String [0..2]) +GameManagement << Interface >> { + + registerPlayer(username: String, password: String): boolean + createBoard():void + createPawn(numberPlayer : Integer):void + addPlayer(userID : String) : Boolean + deletePlayer(username: String): boolean + startGame(): void + endGame(): void + resetRound(): void + addQuestion(question: Question): boolean + addAnswer(answer: Answer): boolean + initialiseQuestions():ArrayList<String> + initialiseAnswers():ArrayList<String> + createAccount(username: String, password: String): boolean + notifyGameStarted(): String } + .... == Interactions