diff --git a/src/index.mjs b/src/index.mjs index 6849646..4f8d2fb 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -38,7 +38,10 @@ server.listen(8080); app .use(express.static(path.resolve("src", "static"))) - + .get("/rooms", (req, res) => { + res.setHeader("Content-Type", "application/json"); + res.send([...rooms.keys()]); + }); io.on("connection", socket => { socket.emit("auth"); // initial ping @@ -46,22 +49,37 @@ io.on("connection", socket => { console.log(blah); io.in(socket.room).emit("test", blah); }); - socket.on("player", data => { // playername, roomname + socket.on("player", data => { // playername, gameroom socket.playername = data.playername; - socket.room = data.roomname; + socket.room = data.gameroom; + socket.join(data.gameroom); - socket.join(data.roomname); - - if(!rooms.has(data.roomname)) { - rooms.set(data.roomname, { - player: new Map(Object.entries({ [data.playername]: { cards: new cards }})), - mainstack: deck() + if(!rooms.has(data.gameroom)) { + rooms.set(data.gameroom, { + player: new Map(Object.entries({ [data.playername]: { cards: new cards, leader: true }})), + mainstack: []//deck() }); } + + if(!rooms.get(data.gameroom).player.has(data.playername)) { + rooms.get(data.gameroom).player.set(data.playername, { cards: new cards, leader: false }); + } + console.log(rooms); - socket.emit("done"); + io.in(socket.room).emit("playerlist", [...rooms.get(data.gameroom).player.keys()]); + }); + socket.on("disconnect", data => { + const room = socket.room; + const player = socket.playername; + socket.disconnect(true); + rooms.get(room).player.delete(player); + io.in(room).emit("playerlist", [...rooms.get(room).player.keys()]); + if(rooms.get(room).player.size === 1) + rooms.get(room).player.values().next().leader = true; + if(rooms.get(room).player.size === 0) + rooms.delete(room); }); - }); -//repl.start("> "); \ No newline at end of file +const r = repl.start("> "); +r.context.rooms = rooms; \ No newline at end of file diff --git a/src/static/js/main.js b/src/static/js/main.js index cc04173..4f79d72 100644 --- a/src/static/js/main.js +++ b/src/static/js/main.js @@ -1,5 +1,5 @@ import * as render from "./render.js"; -import { tpl, msgBox } from "./tpl.js"; +import { msgBox } from "./tpl.js"; //let socket = io(); function card({ type = "normal", val = "" }) { diff --git a/src/static/js/socket.js b/src/static/js/socket.js index c81cb83..1b9cb67 100644 --- a/src/static/js/socket.js +++ b/src/static/js/socket.js @@ -1,45 +1,33 @@ +import { msgBox, removeAllmsgBox } from "./tpl.js"; + let socket = false; let _playername; -let _roomname; +let _gameroom; -export const connect = ({ playername, roomname = "default" }) => { +export const connect = ({ playername, gameroom = "default" }) => { // checks - if(playername < 3 || roomname < 3) + if(playername < 3 || gameroom < 3) return false; - [_playername, _roomname] = [playername, roomname]; + [_playername, _gameroom] = [playername, gameroom]; + if(socket) { + socket.disconnect(); + socket = false; + } socket = io(); socketevents(); }; const socketevents = () => { - socket.on("auth", () => { - - }); -}; - -/*const socketevents = () => { socket.on("auth", () => { socket.emit("player", { - roomname: _roomname, - playername: _playername + playername: _playername, + gameroom: _gameroom }); }); - socket.on("done", () => { - socket.emit("test", "lul"); + removeAllmsgBox(); + msgBox("waitforPlayer"); + socket.on("playerlist", player => { + document.querySelector("span#wfp_players").innerHTML = player.join("
"); }); - socket.on("test", blah => { - console.log(blah); - }); -}; - -export const connect = ({ playername, roomname = "default" }) => { - [_playername, _roomname] = [playername, roomname]; - if(!socket) - socket = io(); - else { - socket.disconnect(true); - socket = io(); - } - socketevents(); -};*/ \ No newline at end of file +}; \ No newline at end of file diff --git a/src/static/js/tpl.js b/src/static/js/tpl.js index ce9adff..d2a2789 100644 --- a/src/static/js/tpl.js +++ b/src/static/js/tpl.js @@ -101,6 +101,18 @@ export const tpl = { removemsgBox(e.target.parentNode.parentNode.parentNode); } }] + }, + waitforPlayer: { + title: "waiting for players", + content: ` + actually connected: 1 + `, + buttons: [{ + tpl: ``, + event: e => { + removemsgBox(e.target.parentNode.parentNode.parentNode); + } + }] } } }; @@ -110,6 +122,11 @@ const removemsgBox = node => { if(document.querySelectorAll(".msgBox").length === 0 && document.querySelector("div#menu").style.display === "none") document.querySelector("#black").style.display = "none"; }; +export const removeAllmsgBox = () => { + document.querySelectorAll(".msgbox").forEach(msgbox => { + removemsgBox(msgbox); + }); +}; export const msgBox = type => { if(document.querySelector("#black").style.display === "none")