const http = require('http'); // const https = require('https'); const express = require('express'); const app = express(); const fs = require('fs') const { Server } = require("socket.io"); var options = { // key: fs.readFileSync('key.pem'), // cert: fs.readFileSync('cert.pem') }; const server = http.createServer(options, app); const io = new Server(server, { maxHttpBufferSize: 1e8 }); const userMap = new Map(); let buzzInfo = []; let userInfo = new Object();//Each user has properties, and is stored as a property of userInfo const teamsList = ["Players","Chasers"] const teamsScore = [0,0] let currentTeamNumber = 0; io.on("connection", (socket) => { console.log("a user connected"); socket.on("disconnect", () => { console.log("user disconnected"); }); //initial info on connection socket.emit("gameStateToClient", teamsList[currentTeamNumber], teamsScore[currentTeamNumber]); socket.on("pingServer", (timeStamp) => { socket.emit("pingClient", timeStamp); }); socket.on("buzzerPressed", (newUserName, newTimeStamp) => { let firstBuzzTimeStamp = (function() { if (buzzInfo.length == 0) { return newTimeStamp } else { return buzzInfo[0].timeStamp; } })(); buzzInfo.push({ userName: newUserName, timeStamp: newTimeStamp, lateTime: newTimeStamp-firstBuzzTimeStamp }); io.emit("buzzInfoToClient", buzzInfo); // function buzzInfoToclient() { // io.emit("buzzInfoToClient", buzzInfo); // console.log(buzzInfo); // } // setTimeout(buzzInfoToclient, 1000); // console.log(buzzInfo); }); socket.on("scoresToServer", score => { teamsScore[currentTeamNumber] += score; if (teamsScore[currentTeamNumber] >= 2) { teamsScore[currentTeamNumber] = 0; currentTeamNumber = (currentTeamNumber+1)%2; // io.emit("switchCurrentteam"); // io.emit("dataToClient", buzzList, teamsList[currentTeamNumber], teamsScore[currentTeamNumber]); } buzzInfo = []; io.emit("gameStateToClient", teamsList[currentTeamNumber], teamsScore[currentTeamNumber]); io.emit("clearBuzzers", teamsList[currentTeamNumber]); io.emit("userInfoToClient", userInfo);//resets the buzzer info }); socket.on("registerUser", (newUserName, newTeamName) => { userInfo[newUserName] = { teamName: newTeamName } io.emit("userInfoToClient", userInfo); }); socket.on("unregisterUsers", () => { userInfo = new Object(); io.emit("userInfoToClient", userInfo); }); }); // const io = new Server(server); const port = 8080; server.listen(port); app.get("/", (request, response) => { response.sendFile("pages/home.html", {root: __dirname }); }); app.get("/host", (request, response) => { response.sendFile("pages/host.html", {root: __dirname }); }); app.get("/play", (request, response) => { response.sendFile("pages/play.html", {root: __dirname }); }); app.get("/browserFunctions.js", (request, response) => { response.sendFile("browserFunctions.js", {root: __dirname }); }); //all files in these folders can be accessed with a GET request of the filename let assetFolders = ["styles","pages","images","audio","fonts"]; assetFolders.forEach((folderName) => { let folderContents = fs.readdirSync(folderName); folderContents.forEach((fileName) => { app.get("/"+fileName, (request, response) => { response.sendFile(folderName+"/"+fileName, {root: __dirname }); }); }); });