From 5b2b14264668fecf110de0c3d655ad55ea5a6bf0 Mon Sep 17 00:00:00 2001 From: Thomas Chazot Date: Fri, 6 Jan 2023 15:47:06 +0100 Subject: [PATCH] Ajout: load match --- api-rest/gateways/gameGateway.php | 15 ++++- bob_party/src/context/matchContext.tsx | 7 +++ bob_party/src/screens/SignIn.tsx | 5 +- .../src/services/gameService/ILoaderGame.ts | 2 +- .../src/services/gameService/loaderGameApi.ts | 29 +++++++++- .../services/matchServices/ILoaderMatch.ts | 2 +- .../services/matchServices/loaderMatchApi.ts | 57 ++++++++++++++++++- 7 files changed, 108 insertions(+), 9 deletions(-) diff --git a/api-rest/gateways/gameGateway.php b/api-rest/gateways/gameGateway.php index 1647662..3bc5c86 100644 --- a/api-rest/gateways/gameGateway.php +++ b/api-rest/gateways/gameGateway.php @@ -51,15 +51,28 @@ class GameGateway{ public function getGameById(string $id):?Game{ $game=null; $gameInfoQuery="SELECT * FROM T_E_GAME_GAM WHERE PK_ID=:id"; + $mapQuery="SELECT * FROM T_J_GAME_MAP_GMP WHERE FK_GAME=:id ORDER BY GMP_KEY"; $arg=array('id'=>array($id,PDO::PARAM_STR)); $this->connection->execQuery($gameInfoQuery,$arg); $res=$this->connection->getRes(); foreach($res as $row){ + $tabKey=[]; + $tabValue=[]; + $arg=array(':id'=>array($row['PK_ID'], PDO::PARAM_INT)); + $this->connection->execQuery($mapQuery,$arg); + $resMap = $this->connection->getRes(); + foreach($resMap as $rowMap){ + $tabKey[]=$rowMap['GMP_KEY']; + $tabValue[]=$rowMap['GMP_VALUE']; + } $game= new Game($row['PK_ID'], $row['GAM_NAME'], $row['GAM_IMAGE'], + $row['GAM_TYPE'], $row['GAM_NB_PLAYER_MIN'], - $row['GAM_NB_PLAYER_MAX']); + $row['GAM_NB_PLAYER_MAX'], + $tabKey, + $tabValue); } return $game; } diff --git a/bob_party/src/context/matchContext.tsx b/bob_party/src/context/matchContext.tsx index 32a4f45..aea5190 100644 --- a/bob_party/src/context/matchContext.tsx +++ b/bob_party/src/context/matchContext.tsx @@ -1,18 +1,25 @@ import React from "react"; import create from "zustand"; import { Match } from "../core/Match/match"; +import { User } from "../core/User/user"; // Define store types interface MatchState { match: Match | null; + tabUser: User[] | null[]; setMatch: (match: Match|null) => void; resetMatch: () => void; + setTabUser: (tabUser: User[] | null[]) => void; + resetTabUser: () => void; } // Define store data and methods export const useMatchStore = create()((set, get) => ({ match: null, + tabUser: [], setMatch: (match) => set((state) => ({ match: match })), resetMatch: () => set((state) => ({ match: null })), + setTabUser: (tabUser) => set((state) => ({ tabUser: tabUser })), + resetTabUser: () => set((state) => ({ tabUser: [] })), })); diff --git a/bob_party/src/screens/SignIn.tsx b/bob_party/src/screens/SignIn.tsx index d4ae0c5..01f4b7a 100644 --- a/bob_party/src/screens/SignIn.tsx +++ b/bob_party/src/screens/SignIn.tsx @@ -9,7 +9,7 @@ import { RootState } from '../redux/store'; import { updateIncorrectCredentials } from '../redux/features/credentialErrorsSlice'; import Dialog from "react-native-dialog"; import { useUserStore } from '../context/userContext'; -import { MANAGER_CONVERSATION, MANAGER_GAME, MANAGER_SKIN, MANAGER_USER } from '../../appManagers'; +import { MANAGER_CONVERSATION, MANAGER_GAME, MANAGER_MATCH, MANAGER_SKIN, MANAGER_USER } from '../../appManagers'; import { socket } from "../../socketConfig"; import { useConversationStore } from '../context/conversationContext'; import { useGameStore } from '../context/gameContext'; @@ -63,7 +63,8 @@ function SignIn(props: { navigation: any; }) { socket.on("messageReceived", async () =>{ await handleConversationLoad(); }); - + const match=await MANAGER_MATCH.getLoaderMatch().loadByID(1); + console.log(match); navigation.navigate('HomeTab'); } else{ diff --git a/bob_party/src/services/gameService/ILoaderGame.ts b/bob_party/src/services/gameService/ILoaderGame.ts index 782dfce..c4c6d10 100644 --- a/bob_party/src/services/gameService/ILoaderGame.ts +++ b/bob_party/src/services/gameService/ILoaderGame.ts @@ -13,5 +13,5 @@ export default interface ILoaderGame{ * id the id we want to search * return a Game if found, if not null */ - loadByID(id:string): Promise; + loadByID(id:number): Promise; } \ No newline at end of file diff --git a/bob_party/src/services/gameService/loaderGameApi.ts b/bob_party/src/services/gameService/loaderGameApi.ts index b7d4a97..5e664de 100644 --- a/bob_party/src/services/gameService/loaderGameApi.ts +++ b/bob_party/src/services/gameService/loaderGameApi.ts @@ -46,8 +46,33 @@ export default class LoaderGameApi implements ILoaderGame{ return tab; } - async loadByID(id: string): Promise { - throw new Error("Method not implemented."); + async loadByID(id: number): Promise { + let game: Game|null=null; + const url="http://localhost:8888/api-rest/index.php/getGameById/" + id; + await this.axios({ + method: 'get', + url: url, + }).then(function (response: any){ + if (response.data!=undefined || response.data!==null){ + switch(response.data.type){ + case "GameSolo": + let mapSolo = new Map(); + for (let i=0; i; + loadByID(id:number): Promise; } \ No newline at end of file diff --git a/bob_party/src/services/matchServices/loaderMatchApi.ts b/bob_party/src/services/matchServices/loaderMatchApi.ts index 8e7a461..35621e7 100644 --- a/bob_party/src/services/matchServices/loaderMatchApi.ts +++ b/bob_party/src/services/matchServices/loaderMatchApi.ts @@ -1,13 +1,66 @@ +import { rejects } from "assert"; +import { MANAGER_GAME, MANAGER_USER } from "../../../appManagers"; +import { GameCasino } from "../../core/gameCasino"; +import { GameMulti } from "../../core/gameMulti"; import { Match } from "../../core/Match/match"; +import MatchCasino from "../../core/Match/matchCasino"; +import MatchMulti from "../../core/Match/matchMulti"; +import { User } from "../../core/User/user"; import ILoaderMatch from "./ILoaderMatch"; export default class LoaderMatchApi implements ILoaderMatch{ + + private axios = require('axios').default; + async loadAllMatch(): Promise { throw new Error("Method not implemented."); } - async loadByID(id: string): Promise { - throw new Error("Method not implemented."); + + async loadByID(id: number): Promise { + let match:Match|null=null; + const url='http://localhost:8888/api-rest/index.php/getMatchById/' + id; + await this.axios({ + method: 'get', + url: url, + }) + .then(async function (response: any) { + if (response.data != null || response.data != undefined){ + match=await jsonToMatch(response); + } + }); + return match; } +} + + +async function jsonToMatch(response: any){ + let match: Match| null=null; + const tabUs: User[]=[]; + let users=new Promise((resolve, reject) => { + response.data.listIdUsers.forEach(async (idUser: number) => { + await MANAGER_USER.getLoaderUser().loadByID(idUser).then((res) =>{ + if (res!==null){ + tabUs.push(res); + } + }); + if (tabUs.length===response.data.listIdUsers.length){ + resolve(); + } + }); + }); + const game = await MANAGER_GAME.getLoaderGame().loadByID(response.data.idGame); + await Promise.all([users]); + if (game!==null){ + if (game instanceof GameMulti){ + match = new MatchMulti(response.data.id, response.data.inGame, tabUs, game); + } + else if (game instanceof GameCasino){ + match = new MatchCasino(response.data.id, response.data.inGame, tabUs, game) + } + } + return match; + + } \ No newline at end of file