diff --git a/cryptide_project/server/server.js b/cryptide_project/server/server.js index 05bdb0e..55d91e9 100644 --- a/cryptide_project/server/server.js +++ b/cryptide_project/server/server.js @@ -37,59 +37,70 @@ io.on('connection', (socket) => { io.to(playerId).emit("join during game", networkPerson, person, indices, start, map.get(room).tab, nodes) }) - socket.on("lobby joined", (room, player) =>{ - if (lastSocketJoined != player.id){ - lastSocketJoined=player.id - const game = map.get(room) - if (game !== undefined){ - if (game.tab.length == 6 && !game.started){ - io.to(socket.id).emit("room full") - return - } - if (game.started){ - for(const u of game.tab){ - if(u.type !== "User" && u.pseudo===player.pseudo){ - u.type = "User" - u.id=socket.id - io.to(game.tab[game.actualPlayer].id).emit("give network", socket.id) - io.to(room).emit("player joined ingame", game.tab) - socket.join(room) - return + socket.on("join back game", (player) => { + for (const k of map.keys()){ + const tab = map.get(k) + for (let i = 0; i{ + + const game = map.get(room) + if (game !== undefined){ + if (game.tab.length == 6 && !game.started){ + io.to(socket.id).emit("room full") + return } - - - if (game == undefined){ - map.set(room, {tab: [{type: player.type, id: socket.id, pseudo: player.pseudo, profilePicture: player.profilePicture}], started: false, actualPlayer: 0, lastWorks: false}) - socket.join(room) - } - else{ - const tab = game.tab - for(let i = 0; i ({ key, value })) - const playerJson = JSON.stringify(playerArray); - io.emit("request lobbies", playerJson) + + if (player.type!=="User"){ + tab.push({type: player.type, id: player.id, pseudo: player.pseudo, profilePicture: player.profilePicture}) + } + else{ + tab.push({type: player.type, id: socket.id, pseudo: player.pseudo, profilePicture: player.profilePicture}) + socket.join(room) + } } + io.to(room).emit("new player", map.get(room)) + const playerArray = Array.from(map.entries()).map(([key, value]) => ({ key, value })) + const playerJson = JSON.stringify(playerArray); + io.emit("request lobbies", playerJson) + }) socket.on("request lobbies", () => { diff --git a/cryptide_project/src/Pages/Lobbies.tsx b/cryptide_project/src/Pages/Lobbies.tsx index 58895a6..1635e34 100644 --- a/cryptide_project/src/Pages/Lobbies.tsx +++ b/cryptide_project/src/Pages/Lobbies.tsx @@ -10,6 +10,7 @@ import User from '../model/User'; import { socket } from '../SocketConfig'; import JSONParser from '../JSONParser'; import Person from '../model/Person'; +import { useNavigationType } from 'react-router-dom'; class LobbyDataProps { @@ -26,6 +27,8 @@ class LobbyDataProps { } } +let cptNavigation = 0 + function Lobbies() { const theme=useTheme(); @@ -46,6 +49,14 @@ function Lobbies() { setFirst(first) } + const navigationType = useNavigationType() + cptNavigation++ + if (cptNavigation % 2 == 0){ + if (navigationType.toString() == "POP"){ + socket.emit("player quit") + } + } + if (first){ setFirst(false) socket.emit("request lobbies") diff --git a/cryptide_project/src/Pages/Play.tsx b/cryptide_project/src/Pages/Play.tsx index a0fc893..d5df326 100644 --- a/cryptide_project/src/Pages/Play.tsx +++ b/cryptide_project/src/Pages/Play.tsx @@ -108,6 +108,7 @@ function Play() { if (loggedIn){ login() setUserData(user) + socket.emit("join back game", user) } else{ loadImageAsync(defaultImg).then((blob) => { @@ -120,6 +121,14 @@ function Play() { } }, [isLoggedIn]); + const [goBackRoom, setGoBackRoom] = useState(-1) + + useEffect(() => { + socket.on("join back game", (room) => { + setGoBackRoom(room) + }) + }, []) + const [room, setRoom] = useState(null); const navigate = useNavigate(); @@ -169,6 +178,10 @@ function Play() { } }, [room, navigate]); + const goBack = () => { + navigate("/lobby?room=" + goBackRoom) + } + const [showOverlay, setShowOverlay] = useState(false); @@ -259,7 +272,7 @@ function Play() { - + {goBackRoom != -1 && }
diff --git a/cryptide_project/src/server/db/socialgraph.db b/cryptide_project/src/server/db/socialgraph.db index 4205e72..31dfec4 100644 Binary files a/cryptide_project/src/server/db/socialgraph.db and b/cryptide_project/src/server/db/socialgraph.db differ