From e4ae27ee117cea39d2162a09495f4aa4b3fe7078 Mon Sep 17 00:00:00 2001 From: Arne van Iterson Date: Fri, 27 Nov 2020 19:08:20 +0100 Subject: [PATCH] Fixed disconnect bug and added room game status Players will not be able to join a game that has already started --- src/index.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/index.js b/src/index.js index ddf5b57..77ed9b4 100644 --- a/src/index.js +++ b/src/index.js @@ -21,6 +21,7 @@ const traffic = { }; var players = {}; +var rooms = {}; // Send players json object app.get("/", (req, res) => { @@ -35,10 +36,10 @@ io.on("connection", (socket) => { const room = players[socket.id].room; var playerUpdate = {}; - if (io.sockets.adapter.rooms[room]) { - for (const id in io.sockets.adapter.rooms[room].sockets) { + if (io.sockets.adapter.rooms.get(room)) { + io.sockets.adapter.rooms.get(room).forEach((id) => { playerUpdate[id] = players[id]; - } + }); } io.in(room).emit("roomUpdate", playerUpdate); @@ -47,6 +48,7 @@ io.on("connection", (socket) => { if (io.sockets.adapter.rooms.get(room) == undefined) { console.log(traffic.int + colours.room(`Room ${room} has been deleted due to a lack of players`)); + delete rooms[room]; } } @@ -73,7 +75,11 @@ io.on("connection", (socket) => { if (roomId[0] == data.gameID) { if (roomId[1] == data.playersMax) { if (io.sockets.adapter.rooms.get(room).size < data.playersMax) { - join += room; + if (!rooms[room].started) { + join += room; + } else { + console.log(traffic.int + colours.room(`Room ${room} has already started, skipping.`)); + } } else { console.log(traffic.int + colours.room(`Room ${room} is full, skipping.`)); } @@ -93,6 +99,11 @@ io.on("connection", (socket) => { }); join = data.gameID + "_" + data.playersMax + "_" + count; + + rooms[join] = { + started: false + }; + console.log(traffic.int + colours.room(`There is no room available for the requested game, making room ${join}`)); } @@ -102,6 +113,7 @@ io.on("connection", (socket) => { if (io.sockets.adapter.rooms.get(join).size == data.playersMax) { console.log(traffic.int + colours.room(`Room ${join} has reached the maximum amount of players, starting game`)); io.in(join).emit("gameStart"); + rooms[join].started = true; } players[socket.id] = { @@ -109,8 +121,6 @@ io.on("connection", (socket) => { room: join }; - console.log(players); - var playerUpdate = {}; io.sockets.adapter.rooms.get(join).forEach((id) => { playerUpdate[id] = players[id];