= Conception préliminaire == Liste des fonctions de l'interface Client-Serveur === Game Service - createRoom(player : TPlayer) : TRoomId - joinRoom(player : TPlayer, roomId : TRoomId) : Response - sendStartGame(player : TPlayer, creatureId : Integer, board : TBoard, color : TColor, placeCards : Tcards[*]) : Response - getGameDescription(player : TPlayer) : TDescription - sendFinishPhase(player : TPlayer, phase : TPhase) : void - sendPlayCards(player : TPlayer, playerCards : TCard[*]) : void - sendPlaceJetons(player : TPlayer, placedJetons : TPlacedJeton[*]) : void - sendResist(player : TPlayer, number : Integer) : void - sendGiveUp(player : TPlayer) : void === Player Service - sendGameDescription(gameDescription : TDescription) : void - sendGameStart(): void - sendGameIsFinished(common.TPlayerTeam winner) : void - sendFirstRoundStart() : void - sendStartPhase(phase : TPhase, gameDescription : TDescription) : void - askAction(askedAction : TAskAction) : TAction - sendAction(askedAction : TAskAction) : void - sendResponse(response : Response) : void == Components diagram - Not alone (Joueur, Créature, Traqué, Main, Carte, Pioche, Réserve, Planète, Partie, Pouvoir) - Base de données (Sauvegarde de joueurs) - Authentificateur (SecurityWrapper) - Client == Components diagram [plantuml, components-diagram, png] .... hide circle skinparam monochrome true component GameService as na component GameClient as c database DataBase as db component SecurityWrapper as sw interface Data as dbi interface GameService as nai interface Security as swi interface PlayerService as ci c - ci nai - na na .> "use" swi c .> "use" nai na ..> "use" ci dbi - db swi - sw sw .> "use" dbi .... === Interface [plantuml, interface-diagrams, png] .... hide circle skinparam monochrome true class "«interface» \n Data" as dbi{ existUser(id : String):Boolean findUser(id : String):User findPlaceCard(id : String):PlaceCard findPlaceCards(ids : String[*]):PlaceCard[*] findSurvivalCard(id : String):SurvivalCard findSurvivalCards(ids : String[*]):SurvivalCard[*] findAllSurvivalCards():SurvivalCard[*] findTrackingCard(id : String):TrackingCard findTrackingCards(ids : String[*]):TrackingCard[*] findAllTrackingCards():TrackingCard[*] } class "«interface» \n Security" as swi{ verifyUser(id : String, password : String):Boolean generateToken(id : String , gameId : String):String getUser(id : String):User } class "«interface» \n GameService" as si{ createRoom(player : TPlayer) : TRoomId joinRoom(player : TPlayer, roomId : TRoomId) : Response sendStartGame(player : TPlayer, creatureId : Integer, board : TBoard, color : TColor, placeCards : Tcards[*]) : Response getGameDescription(player : TPlayer) : TDescription sendFinishPhase(player : TPlayer, phase : TPhase) : void sendPlayCards(player : TPlayer, playerCards : TCard[*]) : void sendPlaceJetons(player : TPlayer, placedJetons : TPlacedJeton[*]) : void sendResist(player : TPlayer, number : Integer) : void sendGiveUp(player : TPlayer) : void } class "«interface» \n PlayerService" as csi{ sendGameDescription(gameDescription : TDescription) : void sendGameStart(): void sendGameIsFinished(common.TPlayerTeam winner) : void sendFirstRoundStart() : void sendStartPhase(phase : TPhase, gameDescription : TDescription) : void askAction(askedAction : TAskAction) : TAction sendAction(askedAction : TAskAction) : void sendResponse(response : Response) : void } .... == Diagrammes de séquence == Diagramme de séquence de mise en place - TPlayer tPlayer1 = {"Jean", "192.168.1.12:4200"} - TPlayer tPlayer2 = {"Sébastien", "192.168.1.13:4200"} Couleur partie : Bleu [plantuml] ---- hide circle skinparam monochrome true C1Client -> S1Serveur : createRoom(tPlayer1) C1Client <-- S1Serveur : 1001 C2Client -> S1Serveur : joinGame(tPlayer2, 1001) C2Client <-- S1Serveur : {true, ""} C1Client -> S1Serveur : sendStartGame(tPlayer1, 1, "PLATEAU_RECTO_ID", "Bleu", [Nexus, Jungle, Rivière, Dôme, Plage, Mangrove , Abri, Epave, Fungi, Portail]) C1Client <-- S1Serveur : {true, ""} S1Serveur ->> C1Client : sendFirstRoundStart() S1Serveur ->> C2Client : sendFirstRoundStart() C1Client -> S1Serveur : getGameDescription(tPlayer1) C1Client <-- S1Serveur : gameDescription C2Client -> S1Serveur : getGameDescription(tPlayer2) C2Client <-- S1Serveur : gameDescription ---- === Diagramme de séquence du déroulement d'une manche - TPlayer tPlayerTraque = {"Jean", "192.168.1.12:4200"} - TPlayer tPlayerCreature = {"Sébastien", "192.168.1.13:4200"} [plantuml] ---- hide circle skinparam monochrome true C1Client <<-- S1Serveur : sendStartPhase("PREPHASE_1", {GameDescription}) C2Client <<-- S1Serveur : sendStartPhase("PREPHASE_1", {GameDescription}) C1Client --> S1Serveur : sendResist(tPlayerTraque, 1) C1Client <-- S1Serveur : {true, ""} C1Client --> S1Serveur : sendPlayCards(tPlayerTraque, ["Adrenaline"]) C1Client <-- S1Serveur : {true, ""} C1Client --> S1Serveur : sendFinishPhase(tPlayerTraque, "PREPHASE_1") C1Client <-- S1Serveur : {true, ""} C2Client --> S1Serveur : sendFinishPhase(tPlayerCreature, "PREPHASE_1") C2Client <-- S1Serveur : {true, ""} C1Client <<-- S1Serveur : sendStartPhase("PHASE_1", {GameDescription}) C2Client <<-- S1Serveur : sendStartPhase("PHASE_1", {GameDescription}) C2Client --> S1Serveur : sendFinishPhase(tPlayerCreature, "PHASE_1") C2Client <-- S1Serveur : {true, ""} C1Client --> S1Serveur : sendPlayCards(tPlayerTraque, ["La_Plage"]) C1Client <-- S1Serveur : {true, ""} C1Client --> S1Serveur : sendFinishPhase(tPlayerTraque, "PHASE_1") C1Client <-- S1Serveur : {true, ""} C1Client <<-- S1Serveur : sendStartPhase("POSTPHASE_1", {GameDescription}) C2Client <<-- S1Serveur : sendStartPhase("POSTPHASE_1", {GameDescription}) C1Client --> S1Serveur : sendFinishPhase(tPlayerTraque, "POSTPHASE_1") C1Client <-- S1Serveur : {true, ""} C2Client --> S1Serveur : sendFinishPhase(tPlayerCreature, "POSTPHASE_1") C2Client <-- S1Serveur : {true, ""} C1Client <<-- S1Serveur : sendStartPhase("PREPHASE_2", {GameDescription}) C2Client <<-- S1Serveur : sendStartPhase("PREPHASE_2", {GameDescription}) C1Client --> S1Serveur : sendFinishPhase(tPlayerTraque, "PREPHASE_2") C1Client <-- S1Serveur : {true, ""} C2Client --> S1Serveur : sendPlayCards(tPlayerCreature, ["Soif_de_sang"]) C2Client <-- S1Serveur : {true, ""} C2Client --> S1Serveur : sendFinishPhase(tPlayerCreature, "PREPHASE_2") C2Client <-- S1Serveur : {true, ""} C1Client <<-- S1Serveur : sendStartPhase("PHASE_2", {GameDescription}) C2Client <<-- S1Serveur : sendStartPhase("PHASE_2", {GameDescription}) C1Client --> S1Serveur : sendFinishPhase(tPlayerTraque, "PHASE_2") C1Client <-- S1Serveur : {true, ""} C2Client --> S1Serveur : sendPlaceJetons(tPlayerCreature, "{{"Creature", "Place_1"}, {"Cible", "Place_7"}}") C2Client <-- S1Serveur : {true, ""} C2Client --> S1Serveur : sendFinishPhase(tPlayerCreature, "PHASE_2") C2Client <-- S1Serveur : {true, ""} C1Client <<-- S1Serveur : sendStartPhase("POSTPHASE_2", {GameDescription}) C2Client <<-- S1Serveur : sendStartPhase("POSTPHASE_2", {GameDescription}) C2Client --> S1Serveur : sendFinishPhase(tPlayerCreature, "POSTPHASE_2") C2Client <-- S1Serveur : {true, ""} C1Client --> S1Serveur : sendFinishPhase(tPlayerTraque, "POSTPHASE_2") C1Client <-- S1Serveur : {true, ""} C1Client <<-- S1Serveur : sendStartPhase("PREPHASE_3", {GameDescription}) C2Client <<-- S1Serveur : sendStartPhase("PREPHASE_3", {GameDescription}) C1Client --> S1Serveur : sendFinishPhase(tPlayerTraque, "PREPHASE_3") C1Client <-- S1Serveur : {true, ""} C2Client --> S1Serveur : sendFinishPhase(tPlayerCreature, "PREPHASE_3") C2Client <-- S1Serveur : {true, ""} C1Client <<-- S1Serveur : sendStartPhase("PHASE_3", {GameDescription}) C2Client <<-- S1Serveur : sendStartPhase("PHASE_3", {GameDescription}) C1Client <- S1Serveur : askAction({"CHOOSE_POWER" ,"Choose a power",[{"1", "Power 1"}, {"2", "Power 2"}]}) C1Client --> S1Serveur : {"CHOOSE_POWER", ["1"]} C1Client --> S1Serveur : sendFinishPhase(tPlayerTraque, "PHASE_3") C1Client <-- S1Serveur : {true, ""} C2Client --> S1Serveur : sendFinishPhase(tPlayerCreature, "PHASE_3") C2Client <-- S1Serveur : {true, ""} C1Client <<-- S1Serveur : sendStartPhase("POSTPHASE_3", {GameDescription}) C2Client <<-- S1Serveur : sendStartPhase("POSTPHASE_3", {GameDescription}) C1Client --> S1Serveur : sendFinishPhase(tPlayerTraque, "POSTPHASE_3") C1Client <-- S1Serveur : {true, ""} C2Client --> S1Serveur : sendFinishPhase(tPlayerCreature, "POSTPHASE_3") C2Client <-- S1Serveur : {true, ""} C1Client <<-- S1Serveur : sendStartPhase("PREPHASE_4", {GameDescription}) C2Client <<-- S1Serveur : sendStartPhase("PREPHASE_4", {GameDescription}) C1Client --> S1Serveur : sendFinishPhase(tPlayerTraque, "PREPHASE_4") C1Client <-- S1Serveur : {true, ""} C2Client --> S1Serveur : sendFinishPhase(tPlayerCreature, "PREPHASE_4") C2Client <-- S1Serveur : {true, ""} C1Client <<-- S1Serveur : sendStartPhase("PHASE_4", {GameDescription}) C2Client <<-- S1Serveur : sendStartPhase("PHASE_4", {GameDescription}) C1Client --> S1Serveur : sendFinishPhase(tPlayerTraque, "PHASE_4") C1Client <-- S1Serveur : {true, ""} C2Client --> S1Serveur : sendFinishPhase(tPlayerCreature, "PHASE_4") C2Client <-- S1Serveur : {true, ""} C1Client <<-- S1Serveur : sendStartPhase("POSTPHASE_4", "GameDescription") C2Client <<-- S1Serveur : sendStartPhase("POSTPHASE_4", {GameDescription}) C1Client --> S1Serveur : sendFinishPhase(tPlayerTraque, "POSTPHASE_4") C1Client <-- S1Serveur : {true, ""} C2Client --> S1Serveur : sendFinishPhase(tPlayerCreature, "POSTPHASE_4") C2Client <-- S1Serveur : {true, ""} ----