diff --git a/cryptide_project/server/server.js b/cryptide_project/server/server.js index 14d53df..ddb6235 100644 --- a/cryptide_project/server/server.js +++ b/cryptide_project/server/server.js @@ -15,7 +15,6 @@ const io = socketIO(server, { const map = new Map() -// ... le reste de votre configuration du serveur server.listen(3002, () => { console.log('Serveur Socket.IO écoutant sur le port 3002'); @@ -29,25 +28,26 @@ io.on('connection', (socket) => { }); socket.on("lobby joined", (room, player) =>{ - if (player.type=="Human"){ + console.log(player) + if (player.type=="User"){ socket.join(room) } if (map.get(room) == undefined){ - map.set(room, [{type: player.type, id: socket.id, name: player.name}]) + map.set(room, [{type: player.type, id: socket.id, pseudo: player.pseudo, profilePicture: player.profilePicture}]) } else{ const tab = map.get(room) for(let i = 0; i { socket.on("bot deleted", (bot, room) =>{ - // map.set(room, map.get(room).filter(player => player.id !== bot.id)); const tab = map.get(room) for(let i = 0; i { {players.map((player, index) => ( player.id !== socket.id && ))} diff --git a/cryptide_project/src/Components/GraphContainer.tsx b/cryptide_project/src/Components/GraphContainer.tsx index 84dba10..2781d13 100644 --- a/cryptide_project/src/Components/GraphContainer.tsx +++ b/cryptide_project/src/Components/GraphContainer.tsx @@ -11,6 +11,7 @@ import { colorToEmoji, positionToColor, positionToEmoji } from "../ColorHelper"; import { ColorToHexa } from "../model/EnumExtender"; import Bot from "../model/Bot"; import NodePerson from "../model/Graph/NodePerson"; +import { useAuth } from "../Contexts/AuthContext"; interface MyGraphComponentProps { @@ -43,6 +44,8 @@ let lastNodes: NodePerson[] = [] const MyGraphComponent: React.FC = ({onNodeClick, handleShowTurnBar, handleTurnBarTextChange, playerTouched, setPlayerTouched, changecptTour, solo, addToHistory, showLast, setNetwork}) => { let cptTour: number = 0 + const {isLoggedIn, user} = useAuth() + console.log('isLoggedIn : ' + isLoggedIn); const { indices, indice, person, personNetwork, setNodeIdData, players, askedPersons, setActualPlayerIndexData, room, actualPlayerIndex, turnPlayerIndex, setTurnPlayerIndexData, setWinnerData } = useGame(); const params = new URLSearchParams(window.location.search); @@ -308,7 +311,7 @@ let cptTour: number = 0 cptHistory++ if (cptHistory % 2 == 0){ lastNodes.push(node) - addToHistory(players[askedIndex].name + " à mis un " + positionToEmoji(askedIndex, works) + " à " + personNetwork.getPersons()[id].getName()) + addToHistory(players[askedIndex].pseudo + " à mis un " + positionToEmoji(askedIndex, works) + " à " + personNetwork.getPersons()[id].getName()) } } @@ -445,19 +448,36 @@ let cptTour: number = 0 }) socket.on("end game", (winnerIndex) =>{ + const currentPlayer = players[actualPlayerIndex]; + const winner = players[winnerIndex]; + setNodeIdData(-1) setActualPlayerIndexData(-1) setLastIndex(-1) setPlayerTouched(-1) setWinnerData(players[winnerIndex]) - + console.log('isLoggedIn : ' + isLoggedIn); + if(isLoggedIn){ + if(solo){ + + } + else{ + if(winner.id === currentPlayer.id){ + console.log("Vous avez gagné !"); + } + else{ + console.log("Vous avez perdu !"); + } + } + } first = true cptHistory = 0 askedWrong=false askedWrongBot=false + socket.off("end game") socket.off("asked all") socket.off("opacity activated") diff --git a/cryptide_project/src/Components/PlayerItemList.tsx b/cryptide_project/src/Components/PlayerItemList.tsx index eb7350d..4fcb752 100644 --- a/cryptide_project/src/Components/PlayerItemList.tsx +++ b/cryptide_project/src/Components/PlayerItemList.tsx @@ -47,7 +47,7 @@ const PlayerItemList:React.FC =({ player, room }) => {
player-image -

{player.name}

+

{player.pseudo}

{isBot && (
diff --git a/cryptide_project/src/Components/ScoreBoard.tsx b/cryptide_project/src/Components/ScoreBoard.tsx index 75f60c0..e005dea 100644 --- a/cryptide_project/src/Components/ScoreBoard.tsx +++ b/cryptide_project/src/Components/ScoreBoard.tsx @@ -20,12 +20,12 @@ import Col from 'react-bootstrap/Col'; /* Component */ import ButtonImgNav from './ButtonImgNav'; +import User from '../model/User'; /* Types */ -import { PlayerProps } from '../types/Player'; //@ts-ignore -const ScoreBoard: React.FC<{ Player: PlayerProps }> = ({ Player }) => { +const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => { const theme=useTheme(); return ( diff --git a/cryptide_project/src/Contexts/AuthContext.tsx b/cryptide_project/src/Contexts/AuthContext.tsx index 763616b..a061775 100644 --- a/cryptide_project/src/Contexts/AuthContext.tsx +++ b/cryptide_project/src/Contexts/AuthContext.tsx @@ -1,22 +1,31 @@ // AuthContext.js import React, { createContext, useContext, useState, ReactNode } from 'react'; +import Player from '../model/Player'; +import User from '../model/User'; import AuthService from '../services/AuthService'; interface AuthContextProps { isLoggedIn: boolean; login: () => void; logout: () => void; + user: User | null + setUserData: (newPlayer: User) => void } const AuthContext = createContext(undefined); const AuthProvider: React.FC<{ children: ReactNode }> = ({ children }) => { const [isLoggedIn, setIsLoggedIn] = useState(false); + const [user, setUser] = useState(null) const login = () => { setIsLoggedIn(true); }; + const setUserData = (player: User | null) => { + setUser(player) + } + const logout = async() => { try { await AuthService.logout(); @@ -28,7 +37,7 @@ const AuthProvider: React.FC<{ children: ReactNode }> = ({ children }) => { }; return ( - + {children} ); diff --git a/cryptide_project/src/JSONParser.ts b/cryptide_project/src/JSONParser.ts index fbd8ef2..d07560b 100644 --- a/cryptide_project/src/JSONParser.ts +++ b/cryptide_project/src/JSONParser.ts @@ -1,5 +1,5 @@ import EasyBot from "./model/EasyBot"; -import Human from "./model/Human"; +import Human from "./model/User"; import AgeIndice from "./model/Indices/AgeIndice"; import ColorEdgesIndice from "./model/Indices/ColorEdgesIndice"; import ColorIndice from "./model/Indices/ColorIndice"; @@ -10,6 +10,7 @@ import SportIndice from "./model/Indices/SportIndice"; import Person from "./model/Person"; import PersonNetwork from "./model/PersonsNetwork"; import Player from "./model/Player"; +import User from "./model/User"; class JSONParser{ @@ -84,10 +85,10 @@ class JSONParser{ static JSONToPlayer(json: any): Player{ switch (json.type){ - case "Human": - return new Human(json.id, json.name) + case "User": + return new User(json.id, json.pseudo, json.profilePicture, json.soloStats, json.onlineStats) case "EasyBot": - return new EasyBot(json.id, json.name) + return new EasyBot(json.id, json.pseudo, json.profilePicture) default: throw new Error("PARSER unable to parse player: " + json.type); } diff --git a/cryptide_project/src/Pages/EndGame.tsx b/cryptide_project/src/Pages/EndGame.tsx index 581664e..d588183 100644 --- a/cryptide_project/src/Pages/EndGame.tsx +++ b/cryptide_project/src/Pages/EndGame.tsx @@ -55,7 +55,7 @@ function EndGame() {
-

{winner?.name} a gagné !

+

{winner?.pseudo} a gagné !

Le tueur était {person?.getName()}

@@ -72,7 +72,7 @@ function EndGame() {
{player.id !== winner?.id && (
- {}} index={index} showCircle={false}/> + {}} index={index} showCircle={false}/>
{indices[players.findIndex((p) => p.id == player?.id)].ToString("fr")}
)} diff --git a/cryptide_project/src/Pages/InGame.tsx b/cryptide_project/src/Pages/InGame.tsx index 199f7b1..7c04d6e 100644 --- a/cryptide_project/src/Pages/InGame.tsx +++ b/cryptide_project/src/Pages/InGame.tsx @@ -390,9 +390,6 @@ const InGame = ({locale, changeLocale}) => { -
- {showChoiceBar && } -
{/*
{/* tmp diff --git a/cryptide_project/src/Pages/Lobby.tsx b/cryptide_project/src/Pages/Lobby.tsx index 61193d0..5f86ed5 100644 --- a/cryptide_project/src/Pages/Lobby.tsx +++ b/cryptide_project/src/Pages/Lobby.tsx @@ -22,9 +22,11 @@ import { useNavigate } from 'react-router-dom'; import { socket } from "../SocketConfig"; import { random } from 'lodash'; import Player from '../model/Player'; -import Human from '../model/Human'; import EasyBot from '../model/EasyBot'; import Bot from '../model/Bot'; +import User from '../model/User'; +import { useAuth } from '../Contexts/AuthContext'; +import SessionService from '../services/SessionService'; let gameStarted = false @@ -36,23 +38,64 @@ function Lobby() { const { indices, setIndicesData, indice, setIndiceData, person, setPersonData, personNetwork, setPersonNetworkData, players, setPlayersData, setActualPlayerIndexData, setTurnPlayerIndexData, setRoomData } = useGame(); + const {user, setUserData} = useAuth() let first = true const params = new URLSearchParams(window.location.search); const room = params.get('room'); function addBot(){ - socket.emit("lobby joined", room, new EasyBot("botId" + Math.floor(Math.random() * 1000), "Bot" + Math.floor(Math.random() * 100)).toJson()) + socket.emit("lobby joined", room, new EasyBot("botId" + Math.floor(Math.random() * 1000), "Bot" + Math.floor(Math.random() * 100), "").toJson()) } - // function delBot(selectedBot: Bot){ - - // } - useEffect(() => { if (first){ first=false - socket.emit("lobby joined", room, new Human("test", "Test" + Math.floor(Math.random() * 100)).toJson()) + + if (user == null){ + try { + const sessionData = SessionService.getSession(); + sessionData.then((s) => { + if (s.user) { + // Il y a une session on récupère les infos du joueur + const updatedPlayer: User = new User(socket.id, s.user.pseudo, s.user.profilePicture, { + nbGames: s.user.soloStats.nbGames, + bestScore: s.user.soloStats.bestScore, + avgNbTry: s.user.soloStats.avgNbTry, + }, + { + nbGames: s.user.onlineStats.nbGames, + nbWins: s.user.onlineStats.nbWins, + ratio: s.user.onlineStats.ratio, + }) + setUserData(updatedPlayer); + socket.emit("lobby joined", room, updatedPlayer.toJson()) + } else { + // Pas de session on génère un guest random + const guestPlayer: User = new User(socket.id, 'Guest_' + Math.floor(Math.random() * 1000000), '', + { + nbGames: 0, + bestScore: 0, + avgNbTry: 0, + }, + { + nbGames: 0, + nbWins: 0, + ratio: 0, + }) + setUserData(guestPlayer); + socket.emit("lobby joined", room, guestPlayer.toJson()) + + } + }) + } + catch (error) { + console.error(error); + } + } + else{ + socket.emit("lobby joined", room, user.toJson()) + } return () => { socket.off('game created'); @@ -114,7 +157,12 @@ function Lobby() { setPersonData(choosenPerson) setPersonNetworkData(networkPerson) setIndicesData(choosenIndices) - let start = 0 + let users = players.filter((p) => p instanceof User) + let u = users[Math.floor(Math.random() * users.length)] + let start = players.findIndex((p) => p.id == u.id) + if (start == -1){ + start = 0 + } socket.emit('network created', JSON.stringify(networkPerson, null, 2), JSON.stringify(choosenPerson), JSON.stringify(choosenIndices), room, start); } diff --git a/cryptide_project/src/Pages/Play.tsx b/cryptide_project/src/Pages/Play.tsx index 522e8af..257177a 100644 --- a/cryptide_project/src/Pages/Play.tsx +++ b/cryptide_project/src/Pages/Play.tsx @@ -22,13 +22,11 @@ import { useGame } from '../Contexts/GameContext'; import ScoreBoard from '../Components/ScoreBoard'; /* Types */ -import { PlayerProps } from '../types/Player'; - +import User from '../model/User'; function Play() { const theme=useTheme() - const {isLoggedIn, login} = useAuth(); - const [player, setPlayer] = useState(null); + const {isLoggedIn, login, user, setUserData } = useAuth(); useEffect(() => { const fetchUserInformation = async () => { @@ -38,45 +36,39 @@ function Play() { // Vérifie si il y a une session if (sessionData.user) { // Il y a une session on récupère les infos du joueur - const updatedPlayer: PlayerProps = { - pseudo: sessionData.user.pseudo, - profilePicture: sessionData.user.profilePicture, - soloStats: { - nbGames: sessionData.user.soloStats.nbGames, - bestScore: sessionData.user.soloStats.bestScore, - avgNbTry: sessionData.user.soloStats.avgNbTry, - }, - onlineStats: { - nbGames: sessionData.user.onlineStats.nbGames, - nbWins: sessionData.user.onlineStats.nbWins, - ratio: sessionData.user.onlineStats.ratio, - }, - }; + const updatedPlayer: User = new User(socket.id, sessionData.user.pseudo, sessionData.user.profilePicture, { + nbGames: sessionData.user.soloStats.nbGames, + bestScore: sessionData.user.soloStats.bestScore, + avgNbTry: sessionData.user.soloStats.avgNbTry, + }, + { + nbGames: sessionData.user.onlineStats.nbGames, + nbWins: sessionData.user.onlineStats.nbWins, + ratio: sessionData.user.onlineStats.ratio, + }) login(); - setPlayer(updatedPlayer); + setUserData(updatedPlayer); } else { // Pas de session on génère un guest random - const guestPlayer: PlayerProps = { - pseudo: 'Guest_' + Math.floor(Math.random() * 1000000), - profilePicture: '', - soloStats: { - nbGames: 0, - bestScore: 0, - avgNbTry: 0, - }, - onlineStats: { - nbGames: 0, - nbWins: 0, - ratio: 0, - }, - }; - setPlayer(guestPlayer); + const guestPlayer: User = new User(socket.id, 'Guest_' + Math.floor(Math.random() * 1000000), '', + { + nbGames: 0, + bestScore: 0, + avgNbTry: 0, + }, + { + nbGames: 0, + nbWins: 0, + ratio: 0, + }) + setUserData(guestPlayer); } } catch (error) { console.error(error); } }; + console.log('isLoggedIn : ', isLoggedIn); fetchUserInformation(); }, [isLoggedIn]); @@ -136,7 +128,7 @@ function Play() {

- {player && player.pseudo} + {user && user.pseudo}

- {player && ()} + {user && ()}
); diff --git a/cryptide_project/src/model/Bot.ts b/cryptide_project/src/model/Bot.ts index 42e74b2..7027e8c 100644 --- a/cryptide_project/src/model/Bot.ts +++ b/cryptide_project/src/model/Bot.ts @@ -13,8 +13,8 @@ abstract class Bot extends Player{ public actualNetwork: Map[]> - constructor( id: string, name: string){ - super(id, name); + constructor( id: string, name: string, profilePicture: string){ + super(id, name, profilePicture); this.actualNetwork = new Map[]>() this.index = -1 diff --git a/cryptide_project/src/model/EasyBot.ts b/cryptide_project/src/model/EasyBot.ts index cb5f38f..582091d 100644 --- a/cryptide_project/src/model/EasyBot.ts +++ b/cryptide_project/src/model/EasyBot.ts @@ -11,15 +11,16 @@ import Player from "./Player"; class EasyBot extends Bot{ - constructor(id: string, name: string){ - super(id, name) + constructor(id: string, name: string, profilePicture: string){ + super(id, name, profilePicture) } toJson() { return { type: "EasyBot", id: this.id, - name: this.name, + pseudo: this.pseudo, + profilePicture: this.profilePicture }; } diff --git a/cryptide_project/src/model/Human.tsx b/cryptide_project/src/model/Human.tsx deleted file mode 100644 index f8aba5d..0000000 --- a/cryptide_project/src/model/Human.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import Player from "./Player"; -import defaultImg from '../res/img/Person.png' - -class Human extends Player{ - - public pdp: string; - - constructor(id: string, name: string){ - super(id, name) - this.pdp = defaultImg; - } - - toJson() { - return { - type: "Human", - id: this.id, - name: this.name, - }; - } -} - -export default Human \ No newline at end of file diff --git a/cryptide_project/src/model/Player.ts b/cryptide_project/src/model/Player.ts index fa095b9..c7a7786 100644 --- a/cryptide_project/src/model/Player.ts +++ b/cryptide_project/src/model/Player.ts @@ -1,13 +1,14 @@ abstract class Player{ public id: string - public name: string; + public pseudo: string; + public profilePicture: string - constructor(id: string, name: string){ + constructor(id: string, pseudo: string, profilePicture: string){ this.id=id - this.name=name - + this.pseudo=pseudo + this.profilePicture=profilePicture } abstract toJson(): any diff --git a/cryptide_project/src/model/User.tsx b/cryptide_project/src/model/User.tsx new file mode 100644 index 0000000..ee287a8 --- /dev/null +++ b/cryptide_project/src/model/User.tsx @@ -0,0 +1,25 @@ +import Player from "./Player"; + +class User extends Player{ + + public soloStats: any + public onlineStats: any + + constructor(id: string, name: string, profilePicture: string, soloStats: any, onlineStats: any){ + super(id, name, profilePicture) + this.soloStats=soloStats + this.onlineStats=onlineStats + } + + toJson() { + return { + type: "User", + id: this.id, + pseudo: this.pseudo, + soloStats: this.soloStats, + onlineStats: this.onlineStats + }; + } +} + +export default User \ No newline at end of file diff --git a/cryptide_project/src/server/controllers/AuthController.js b/cryptide_project/src/server/controllers/AuthController.js index 6bd5aa7..87d77e2 100644 --- a/cryptide_project/src/server/controllers/AuthController.js +++ b/cryptide_project/src/server/controllers/AuthController.js @@ -71,6 +71,7 @@ class AuthController { } // Stocker l'utilisateur dans la session){ + console.log("SESSION") console.log(req.session); req.session.user = user; diff --git a/cryptide_project/src/server/server.js b/cryptide_project/src/server/server.js index 2fd7d00..e47f470 100644 --- a/cryptide_project/src/server/server.js +++ b/cryptide_project/src/server/server.js @@ -12,7 +12,7 @@ const port = 3003; // Middleware app.use(cors( { - origin: 'http://localhost:3000', + origin: ['http://localhost:3000', "http://172.20.10.4:3000"], credentials: true } )); // Autoriser les requêtes cross-origin