diff --git a/truthseeker/routes/routes_api.py b/truthseeker/routes/routes_api.py index df0e6db..a4af166 100644 --- a/truthseeker/routes/routes_api.py +++ b/truthseeker/routes/routes_api.py @@ -25,6 +25,19 @@ def create_game(): flask.session["username"] = username return response + +@routes_api.route("/getGameMembers", methods=["GET", "POST"]) +def getMembers(): + if not flask.session: + return {"error": 1, "msg": "No session"} + game = game_logic.get_game(flask.session["game_id"]) + if game == None: + return {"error": 1, "msg": "this game doesn't exist"} + + response = {"error" : 0} + player_list = [member.username for member in game.members] + response["members"] = player_list + return response @routes_api.route("/joinGame", methods=["GET", "POST"]) def join_game(): @@ -49,7 +62,16 @@ def join_game(): APP.socketio_app.emit("playersjoin", [flask.session["username"]], room="game."+game.game_id) return {"error": 0} - + +@routes_api.route("/hasJoined", methods=["GET", "POST"]) +def has_joined(): + if not flask.session: + return {"error": 0, "joined": False} + game = game_logic.get_game(flask.session["game_id"]) + if game == None: + return {"error": 0, "joined": False} + return {"error": 0, "joined": True} + @routes_api.route("/startGame", methods=["GET", "POST"]) def start_game(): if not flask.session: diff --git a/truthseeker/static/js/game_lobby.js b/truthseeker/static/js/game_lobby.js index 401a2aa..5aca9bc 100644 --- a/truthseeker/static/js/game_lobby.js +++ b/truthseeker/static/js/game_lobby.js @@ -23,6 +23,14 @@ function displayRoomCode() { * Display the players list element. */ function displayPlayerList() { + response = makeAPIRequest("getGameMembers"); + response.then((value) =>{ + player_list = document.getElementsByClassName("player_names")[0]; + value["members"].forEach(username => { + player_list.appendChild(document.createTextNode(username+"\n")); + }); + + }); document.getElementsByClassName("players_list")[0].classList.remove("hidden"); } @@ -49,6 +57,10 @@ function displayJoinRoomView() { document.getElementsByClassName("join_room_view")[0].classList.remove("hidden"); } + +function addJoinRoomView() { + document.getElementsByClassName("join_room_view")[0].classList.add("hidden"); +} /** * Show an error message on the first game_start_failed CSS element. * @@ -111,9 +123,16 @@ function joinRoom() { } hideInvalidNickNameErrorMessage(); - //TODO: join the game room and handle server errors + connection errors + data = {} + data["username"] = document.getElementById("game_username").value; + data["game_id"] = getRoomCode(); + response = makeAPIRequest("joinGame",data); + response.then((value)=>{ + displayRoomView(); + displayPlayerList(); + displayJoinRoomView(); + }) } - // Room code functions /** @@ -216,9 +235,9 @@ function isRoomOwner() { return true; } -function hasJoinedRoom() { - //FIXME: check if player has joined the room - return true; +async function hasJoinedRoom() { + response = await makeAPIRequest("hasJoined"); + return response["joined"]; } /** @@ -297,7 +316,6 @@ function getChallengeModeRoundsCount() { */ function getRoomCode() { gameid = document.getElementById("game_id").value; - console.log(gameid); return gameid; } @@ -317,7 +335,7 @@ function getRoomCode() { * join room button will be set. *

*/ -function initLobby() { +async function initLobby() { gameid = getRoomCode(); socket = io({ @@ -330,12 +348,13 @@ function initLobby() { console.log("Connected !") }) - socket.on("playersjoin", (err) => { - console.log(`Failed to connect to socket: ${err.message}`); + socket.on("playersjoin", (username) => { + console.log(`${username} joined`); + player_list = document.getElementsByClassName("player_names")[0]; + player_list.appendChild(document.createTextNode(username)); }); - - if (hasJoinedRoom()) { + if (await hasJoinedRoom()) { displayRoomView(); if (isRoomOwner()) { displayRoomCode();