From 532089147e9fa71d8919c2c3f0b16180818e780c Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:22:23 +0530 Subject: [PATCH 01/13] server side code --- server/app.js | 21 +++++---- server/index.js | 80 ++++++++++++++++++++++++++++++++- server/middleware/auth.js | 22 ++++----- server/models/rooms.js | 9 ++++ server/models/user.js | 4 +- server/routers/index.js | 58 +++++++++++++----------- server/sockets/socket-server.js | 72 +++++++++++++++++++++++++++++ 7 files changed, 216 insertions(+), 50 deletions(-) create mode 100644 server/models/rooms.js create mode 100644 server/sockets/socket-server.js diff --git a/server/app.js b/server/app.js index 63b8c61..1311a82 100644 --- a/server/app.js +++ b/server/app.js @@ -2,10 +2,10 @@ const express = require('express') const path = require('path') const dotenv = require('dotenv') -dotenv.config( {path: 'server/.env'}); +dotenv.config({ path: 'server/.env' }); //database setup -const mongoose =require('mongoose') +const mongoose = require('mongoose') require('./db/mongoose') //passport setup for authentication and sessions @@ -13,17 +13,16 @@ const app = express() const session = require('express-session'); const passport = require("passport"); app.use(session({ - secret: process.env.SECRET, - resave: false, - saveUninitialized: false - })); + secret: process.env.SECRET, + resave: false, + saveUninitialized: false +})); app.use(passport.initialize()); app.use(passport.session()); const passports = require('./middleware/auth') - // index router for various routes -const indexRouter = require('./routers/index') +const { router } = require('./routers/index') //file location for different ejs files @@ -32,8 +31,8 @@ const publicDirectoryPath = path.join(__dirname, '../client') //ejs setup app.set('view engine', 'ejs') app.set('views', publicDirectoryPath) -app.use(express.static(publicDirectoryPath, { index: '_' })) -app.use(indexRouter) +app.use(express.static(publicDirectoryPath, { index: '_' })) +app.use(router) //exporting module for index.js -module.exports = app +module.exports = app \ No newline at end of file diff --git a/server/index.js b/server/index.js index cd7bc19..383c2b9 100644 --- a/server/index.js +++ b/server/index.js @@ -1,8 +1,86 @@ //importing app const app = require('./app') +const http = require('http') +const socket = require('socket.io') //port as enviroment variable const port = process.env.PORT || 3000 +const server = http.Server(app) //server up check -app.listen(port, () => { +server.listen(port, () => { console.log('Server is up on port ' + port) }) + +//socket setup +const io = socket(server) + +// on connecting with client socket +io.on('connection', (socket) => { + // join event listner + socket.once('join', function (roomname) { + // checks for maximum users and if game started? + if ((io.nsps['/'].adapter.rooms[roomname] && io.nsps['/'].adapter.rooms[roomname].length > 11) || (io.nsps['/'].adapter.rooms[roomname] && io.nsps['/'].adapter.rooms[roomname].allowed != undefined)) { + } else { + socket.join(roomname) // if passed checks joins room + socket.broadcast.emit('broadcast', 'new player joined'); // brodcast every other a player has joined + socket.emit('connectToRoom', "You are in room " + roomname) // emit user the roomname + } + }) + + // set username event listner + socket.on('setUsername', function (data) { + var usernameTaken = 0; // var for checking unique username + io.in(data.roomname).clients((error, clients) => { // getting all clients in room + if (error) throw error; + // loop for checking username of every other player with given username + for (var i = 0; i < clients.length; i++) { + var user = io.sockets.sockets[clients[i]]; // saving socket into user + + if (user.username == data.username) { // if equal therfore username taken + usernameTaken = 1; // setting var to 1 + break; // break from loop + } + } + + if (!usernameTaken) { + socket.username = data.username // setting username in socket of that client + socket.emit('userSet', { username: data.username }) // emiting username to client side + } else { + // emitting dupilicate username to client side + socket.emit('userExists', data.username + ' username is taken! Try some other username.'); + socket.emit('newPrompt'); //emitting new Prompt for new username + } + }) + }); + + // gameStart listner + socket.on('gameStart', (data) => { + var usernames = []; // array for storing usernames + io.in(data.roomname).clients((error, clients) => { // getting all clients in a room + if (error) throw error; + clients.forEach(client => { + var person = io.sockets.sockets[client] + usernames.push(person.username) // adding their username to usernames array + }); + }) + if (io.nsps['/'].adapter.rooms[data.roomname].length > 1) { + io.nsps['/'].adapter.rooms[data.roomname].allowed = 1; // setting var for game started true + io.in(data.roomname).emit('usersList', usernames) // emitting usernames list to clients + } else { + io.in(data.roomname).emit('lessPlayers', 'need more to start game') + } + + }) + // cardHandToDeck event listner + socket.on('cardHandToDeck', (ids) => { + io.in(roomname).emit('cardsInDeck', ids); + }) + // endGame event listner + socket.on('endGame',(data)=>{ + io.in(data.roomname).emit('redirect','/') + }) + // dissconection event + socket.once('disconnect', function () { + console.log('disconnected') + }) +}) + diff --git a/server/middleware/auth.js b/server/middleware/auth.js index ebec376..94c9acf 100644 --- a/server/middleware/auth.js +++ b/server/middleware/auth.js @@ -1,9 +1,9 @@ //userSchema const User = require("./../models/user") const bodyParser = require('body-parser') - const passport = require("passport"); +const passport = require("passport"); - const GoogleStrategy = require('passport-google-oauth20').Strategy; +const GoogleStrategy = require('passport-google-oauth20').Strategy; var urlencodedParser = bodyParser.urlencoded({ extended: false }) @@ -12,13 +12,13 @@ var urlencodedParser = bodyParser.urlencoded({ extended: false }) passport.use(User.createStrategy()); //serializing user creating session cookie -passport.serializeUser(function(user, done) { +passport.serializeUser(function (user, done) { done(null, user.id); }); // deserializing cookie to get user info -passport.deserializeUser(function(id, done) { - User.findById(id, function(err, user) { +passport.deserializeUser(function (id, done) { + User.findById(id, function (err, user) { done(err, user); }); }); @@ -28,10 +28,10 @@ passport.use(new GoogleStrategy({ callbackURL: "https://acm-bluff.herokuapp.com/auth/google/home", userProfileURL: "https://www.googleapis.com/oauth2/v3/userinfo" }, -// function for verify and storing user into database -function(accessToken, refreshToken, profile, cb) { - User.findOrCreate({ googleId: profile.id}, function (err, user) { - return cb(err, user); - }); -} + // function for verify and storing user into database + function (accessToken, refreshToken, profile, cb) { + User.findOrCreate({ googleId: profile.id }, function (err, user) { + return cb(err, user); + }); + } )); diff --git a/server/models/rooms.js b/server/models/rooms.js new file mode 100644 index 0000000..1cc6b83 --- /dev/null +++ b/server/models/rooms.js @@ -0,0 +1,9 @@ +const mongoose = require('mongoose'); +const ttl = require('mongoose-ttl'); + +const roomSchema = new mongoose.Schema({ + Roomname :{ type:String, unique:true}, +}); +roomSchema.plugin(ttl, { ttl: '2m' }); +const Room = mongoose.model('room', roomSchema,); +module.exports = Room \ No newline at end of file diff --git a/server/models/user.js b/server/models/user.js index 64cf08a..6962473 100644 --- a/server/models/user.js +++ b/server/models/user.js @@ -6,9 +6,9 @@ const passportLocalMongoose = require("passport-local-mongoose"); const findOrCreate = require('mongoose-findorcreate') //userSchema const userSchema = new mongoose.Schema({ - googleId: {type: String, index: true, unique: true}, + googleId: { type: String, index: true, unique: true }, }); -userSchema.plugin(passportLocalMongoose,{usernameField:'googleId',saltField: process.env.SALT,hashField: process.env.HASH}) +userSchema.plugin(passportLocalMongoose, { usernameField: 'googleId', saltField: process.env.SALT, hashField: process.env.HASH }) userSchema.plugin(findOrCreate); const User = mongoose.model('user', userSchema, 'user'); module.exports = User \ No newline at end of file diff --git a/server/routers/index.js b/server/routers/index.js index 975f272..3a2fb1e 100644 --- a/server/routers/index.js +++ b/server/routers/index.js @@ -1,41 +1,49 @@ -//router setup +// router setup const express = require('express') const router = new express.Router() +// var bodyParser = require('body-parser') +// const Room = require('../models/rooms') +// var urlencodedParser = bodyParser.urlencoded({ extended: false }) +// authentication setup +const passport = require('passport') -//authentication setup -const passport = require("passport"); - -//index route +// index route router.get('', (req, res) => { - res.render('index') + res.redirect('/rooms') }) -//google auth entry route -router.get('/login',(req,res)=>{ -res.redirect('/auth/google') +// google auth entry route +router.get('/login', (req, res) => { + res.redirect('/auth/google') }) -//route authenticating user by google +// route authenticating user by google router.get('/auth/google', - passport.authenticate('google',{scope: ["profile"]}) + passport.authenticate('google', { + scope: ['profile'] + }) ) -//route redirected to after sucessfull authentication from google -router.get('/auth/google/home',passport.authenticate('google', { failureRedirect: "/login" }), -function(req, res) { - res.redirect("/result"); -}); +// route redirected to after sucessfull authentication from google +router.get('/auth/google/home', passport.authenticate('google', { + failureRedirect: '/login' +}), +function (req, res) { + res.redirect('/result') +}) // redirected route to render result page -router.get('/result',(req,res)=>{ - if (req.isAuthenticated()){ +router.get('/result', (req, res) => { + if (req.isAuthenticated()) { res.render('index') - }else{ - res.redirect('/login') - } - - + } else { + res.redirect('/login') + } }) -//exporting module for app.js -module.exports = router +// route for socket testing +router.get('/rooms', (req, res) => { + res.render('test') +}) +// exporting module for app.js +module.exports = { router } diff --git a/server/sockets/socket-server.js b/server/sockets/socket-server.js new file mode 100644 index 0000000..835d840 --- /dev/null +++ b/server/sockets/socket-server.js @@ -0,0 +1,72 @@ +const socket = require('socket.io'); +const { server } = require("./index"); +//socket setup +const io = socket(server); + +// on connecting with client +io.on('connection', (socket) => { + console.log('connected') + socket.once('join', function (roomname) { + console.log('work2') + if ((io.nsps['/'].adapter.rooms[roomname] && io.nsps['/'].adapter.rooms[roomname].length > 11) || (io.nsps['/'].adapter.rooms[roomname] && io.nsps['/'].adapter.rooms[roomname].allowed != undefined)) { + } + else { + socket.join(roomname); + socket.broadcast.emit('joinplayer', 'new player joined'); + socket.emit('connectToRoom', "You are in room " + roomname); + console.log(io.nsps['/'].adapter.rooms[roomname].length); + } + }); + // var clients = io.of('/').clients(roomname); + // console.log(clients) + socket.on('setUsername', function (data) { + var userlogged = 0; + io.in(data.roomname).clients((error, clients) => { + if (error) + throw error; + // => [Anw2LatarvGVVXEIAAAD] + for (var i = 0; i < clients.length; i++) { + var log = io.sockets.sockets[clients[i]]; + console.log(log.username); + if (log.username == data.username) { + userlogged = 1; + console.log('userlogged'); + break; + } + else { + console.log('notlogged'); + } + } + + if (!userlogged) { + socket.username = data.username; + socket.emit('userSet', { username: data.username }); + console.log('not work'); + } + else { + + socket.emit('userExists', data.username + ' username is taken! Try some other username.'); + socket.emit('newPrompt'); + } + }); + }); + socket.on('gameStart', (data) => { + var usernames = []; + io.in(data.roomname).clients((error, clients) => { + if (error) + throw error; + clients.forEach(client => { + var person = io.sockets.sockets[client]; + usernames.push(person.username); + }); + }); + io.nsps['/'].adapter.rooms[data.roomname].allowed = 1; + socket.emit('usersList', usernames); + }); + socket.on('cardHandToDeck', (ids) => { + io.in(roomname).emit('cardsInDeck', ids); + }); + socket.once('disconnect', function () { + console.log('disconnected'); + }); +}); From dc3435ecd6bf10d267436342e9d7791edd31ae90 Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:23:30 +0530 Subject: [PATCH 02/13] Add files via upload --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 4e27896..5edb77d 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "mongodb": "^3.5.4", "mongoose": "^5.9.4", "mongoose-findorcreate": "^3.0.0", + "mongoose-ttl": "0.0.3", "passport": "^0.4.1", "passport-google-oauth20": "^2.0.0", "passport-local": "^1.0.0", @@ -41,7 +42,7 @@ }, "devDependencies": { "env-cmd": "^8.0.2", - "eslint": "^7.3.1", + "eslint": "^7.6.0", "eslint-config-standard": "^14.1.1", "eslint-plugin-import": "^2.22.0", "eslint-plugin-node": "^11.1.0", From f383b49baf43046f84d77972fcbd3de98d9abc6a Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:05:52 +0530 Subject: [PATCH 03/13] Update index.js --- server/routers/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/routers/index.js b/server/routers/index.js index 3a2fb1e..edf1252 100644 --- a/server/routers/index.js +++ b/server/routers/index.js @@ -9,7 +9,7 @@ const passport = require('passport') // index route router.get('', (req, res) => { - res.redirect('/rooms') + res.render('/index') }) // google auth entry route From a76ab3b32f245a9a0dfcc7d452140cb7ef0fabd4 Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Thu, 13 Aug 2020 11:14:36 +0530 Subject: [PATCH 04/13] Update index.js --- server/routers/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/routers/index.js b/server/routers/index.js index edf1252..741b63c 100644 --- a/server/routers/index.js +++ b/server/routers/index.js @@ -9,7 +9,7 @@ const passport = require('passport') // index route router.get('', (req, res) => { - res.render('/index') + res.render('index') }) // google auth entry route From c9a0499e0661561df1bb93032e1b8c5b776df440 Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Thu, 13 Aug 2020 14:48:27 +0530 Subject: [PATCH 05/13] Update index.js --- server/index.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/server/index.js b/server/index.js index 383c2b9..ffd1af0 100644 --- a/server/index.js +++ b/server/index.js @@ -70,9 +70,14 @@ io.on('connection', (socket) => { } }) + + // cardHandShuffle + socket.on('cardHandShuffle',(data)=>{ + io.in(data.roomname).emit('shuffle',{init:data.init,final:data.final}) + }) // cardHandToDeck event listner - socket.on('cardHandToDeck', (ids) => { - io.in(roomname).emit('cardsInDeck', ids); + socket.on('cardHandToDeck', (data) => { + io.in(data.roomname).emit('cardsInDeck', data.ids); }) // endGame event listner socket.on('endGame',(data)=>{ From 92bca4bda1a88202ae4baf5ddde98ff68a252e4f Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Fri, 14 Aug 2020 21:26:52 +0530 Subject: [PATCH 06/13] copied socket code to socket-server.js --- server/index.js | 81 +----------------------- server/sockets/socket-server.js | 106 ++++++++++++++++---------------- 2 files changed, 57 insertions(+), 130 deletions(-) diff --git a/server/index.js b/server/index.js index ffd1af0..f9e8b14 100644 --- a/server/index.js +++ b/server/index.js @@ -4,7 +4,7 @@ const http = require('http') const socket = require('socket.io') //port as enviroment variable const port = process.env.PORT || 3000 -const server = http.Server(app) +const server = http.createServer(app) //server up check server.listen(port, () => { console.log('Server is up on port ' + port) @@ -12,80 +12,5 @@ server.listen(port, () => { //socket setup const io = socket(server) - -// on connecting with client socket -io.on('connection', (socket) => { - // join event listner - socket.once('join', function (roomname) { - // checks for maximum users and if game started? - if ((io.nsps['/'].adapter.rooms[roomname] && io.nsps['/'].adapter.rooms[roomname].length > 11) || (io.nsps['/'].adapter.rooms[roomname] && io.nsps['/'].adapter.rooms[roomname].allowed != undefined)) { - } else { - socket.join(roomname) // if passed checks joins room - socket.broadcast.emit('broadcast', 'new player joined'); // brodcast every other a player has joined - socket.emit('connectToRoom', "You are in room " + roomname) // emit user the roomname - } - }) - - // set username event listner - socket.on('setUsername', function (data) { - var usernameTaken = 0; // var for checking unique username - io.in(data.roomname).clients((error, clients) => { // getting all clients in room - if (error) throw error; - // loop for checking username of every other player with given username - for (var i = 0; i < clients.length; i++) { - var user = io.sockets.sockets[clients[i]]; // saving socket into user - - if (user.username == data.username) { // if equal therfore username taken - usernameTaken = 1; // setting var to 1 - break; // break from loop - } - } - - if (!usernameTaken) { - socket.username = data.username // setting username in socket of that client - socket.emit('userSet', { username: data.username }) // emiting username to client side - } else { - // emitting dupilicate username to client side - socket.emit('userExists', data.username + ' username is taken! Try some other username.'); - socket.emit('newPrompt'); //emitting new Prompt for new username - } - }) - }); - - // gameStart listner - socket.on('gameStart', (data) => { - var usernames = []; // array for storing usernames - io.in(data.roomname).clients((error, clients) => { // getting all clients in a room - if (error) throw error; - clients.forEach(client => { - var person = io.sockets.sockets[client] - usernames.push(person.username) // adding their username to usernames array - }); - }) - if (io.nsps['/'].adapter.rooms[data.roomname].length > 1) { - io.nsps['/'].adapter.rooms[data.roomname].allowed = 1; // setting var for game started true - io.in(data.roomname).emit('usersList', usernames) // emitting usernames list to clients - } else { - io.in(data.roomname).emit('lessPlayers', 'need more to start game') - } - - }) - - // cardHandShuffle - socket.on('cardHandShuffle',(data)=>{ - io.in(data.roomname).emit('shuffle',{init:data.init,final:data.final}) - }) - // cardHandToDeck event listner - socket.on('cardHandToDeck', (data) => { - io.in(data.roomname).emit('cardsInDeck', data.ids); - }) - // endGame event listner - socket.on('endGame',(data)=>{ - io.in(data.roomname).emit('redirect','/') - }) - // dissconection event - socket.once('disconnect', function () { - console.log('disconnected') - }) -}) - +module.exports = { io } +require('./sockets/socket-server') \ No newline at end of file diff --git a/server/sockets/socket-server.js b/server/sockets/socket-server.js index 835d840..be0bb2c 100644 --- a/server/sockets/socket-server.js +++ b/server/sockets/socket-server.js @@ -1,72 +1,74 @@ -const socket = require('socket.io'); -const { server } = require("./index"); -//socket setup -const io = socket(server); +const {io} = require('./../index') -// on connecting with client +// on connecting with client socket io.on('connection', (socket) => { console.log('connected') + // join event listner socket.once('join', function (roomname) { - console.log('work2') + // checks for maximum users and if game started? if ((io.nsps['/'].adapter.rooms[roomname] && io.nsps['/'].adapter.rooms[roomname].length > 11) || (io.nsps['/'].adapter.rooms[roomname] && io.nsps['/'].adapter.rooms[roomname].allowed != undefined)) { + } else { + socket.join(roomname) // if passed checks joins room + socket.broadcast.emit('broadcast', 'new player joined'); // brodcast every other a player has joined + socket.emit('connectToRoom', "You are in room " + roomname) // emit user the roomname } - else { - socket.join(roomname); - socket.broadcast.emit('joinplayer', 'new player joined'); - socket.emit('connectToRoom', "You are in room " + roomname); - console.log(io.nsps['/'].adapter.rooms[roomname].length); - } - }); - // var clients = io.of('/').clients(roomname); - // console.log(clients) + }) + + // set username event listner socket.on('setUsername', function (data) { - var userlogged = 0; - io.in(data.roomname).clients((error, clients) => { - if (error) - throw error; - // => [Anw2LatarvGVVXEIAAAD] + var usernameTaken = 0; // var for checking unique username + io.in(data.roomname).clients((error, clients) => { // getting all clients in room + if (error) throw error; + // loop for checking username of every other player with given username for (var i = 0; i < clients.length; i++) { - var log = io.sockets.sockets[clients[i]]; - console.log(log.username); - if (log.username == data.username) { - userlogged = 1; - console.log('userlogged'); - break; - } - else { - console.log('notlogged'); - } - } + var user = io.sockets.sockets[clients[i]]; // saving socket into user - if (!userlogged) { - socket.username = data.username; - socket.emit('userSet', { username: data.username }); - console.log('not work'); + if (user.username == data.username) { // if equal therfore username taken + usernameTaken = 1; // setting var to 1 + break; // break from loop + } } - else { + if (!usernameTaken) { + socket.username = data.username // setting username in socket of that client + socket.emit('userSet', { username: data.username }) // emiting username to client side + } else { + // emitting dupilicate username to client side socket.emit('userExists', data.username + ' username is taken! Try some other username.'); - socket.emit('newPrompt'); + socket.emit('newPrompt'); //emitting new Prompt for new username } - }); + }) }); + + // gameStart listner socket.on('gameStart', (data) => { - var usernames = []; - io.in(data.roomname).clients((error, clients) => { - if (error) - throw error; + var usernames = []; // array for storing usernames + io.in(data.roomname).clients((error, clients) => { // getting all clients in a room + if (error) throw error; clients.forEach(client => { - var person = io.sockets.sockets[client]; - usernames.push(person.username); + var person = io.sockets.sockets[client] + usernames.push(person.username) // adding their username to usernames array }); - }); - io.nsps['/'].adapter.rooms[data.roomname].allowed = 1; - socket.emit('usersList', usernames); - }); + }) + if (io.nsps['/'].adapter.rooms[data.roomname].length > 1) { + io.nsps['/'].adapter.rooms[data.roomname].allowed = 1; // setting var for game started true + io.in(data.roomname).emit('usersList', usernames) // emitting usernames list to clients + } else { + io.in(data.roomname).emit('lessPlayers', 'need more to start game') + } + + }) + // cardHandToDeck event listner socket.on('cardHandToDeck', (ids) => { io.in(roomname).emit('cardsInDeck', ids); - }); + }) + // endGame event listner + socket.on('endGame',(data)=>{ + io.in(data.roomname).emit('redirect','/') + }) + // dissconection event socket.once('disconnect', function () { - console.log('disconnected'); - }); -}); + console.log('disconnected') + }) +}) + From 0a4102871a84aac25b2f1b3bbb9ad50636c503ab Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Fri, 14 Aug 2020 21:51:40 +0530 Subject: [PATCH 07/13] Add files via upload --- server/index.js | 2 ++ server/models/user.js | 3 +++ server/routers/index.js | 6 ++---- server/sockets/socket-server.js | 4 ++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/server/index.js b/server/index.js index f9e8b14..87277ae 100644 --- a/server/index.js +++ b/server/index.js @@ -2,9 +2,11 @@ const app = require('./app') const http = require('http') const socket = require('socket.io') + //port as enviroment variable const port = process.env.PORT || 3000 const server = http.createServer(app) + //server up check server.listen(port, () => { console.log('Server is up on port ' + port) diff --git a/server/models/user.js b/server/models/user.js index 6962473..1df214c 100644 --- a/server/models/user.js +++ b/server/models/user.js @@ -2,13 +2,16 @@ const mongoose = require('mongoose'); const passportLocalMongoose = require("passport-local-mongoose"); + //findOrCreate module for using function in passport const findOrCreate = require('mongoose-findorcreate') + //userSchema const userSchema = new mongoose.Schema({ googleId: { type: String, index: true, unique: true }, }); userSchema.plugin(passportLocalMongoose, { usernameField: 'googleId', saltField: process.env.SALT, hashField: process.env.HASH }) userSchema.plugin(findOrCreate); + const User = mongoose.model('user', userSchema, 'user'); module.exports = User \ No newline at end of file diff --git a/server/routers/index.js b/server/routers/index.js index 741b63c..3bd3f73 100644 --- a/server/routers/index.js +++ b/server/routers/index.js @@ -1,15 +1,13 @@ // router setup const express = require('express') const router = new express.Router() -// var bodyParser = require('body-parser') -// const Room = require('../models/rooms') -// var urlencodedParser = bodyParser.urlencoded({ extended: false }) + // authentication setup const passport = require('passport') // index route router.get('', (req, res) => { - res.render('index') + res.redirect('/rooms') }) // google auth entry route diff --git a/server/sockets/socket-server.js b/server/sockets/socket-server.js index be0bb2c..b2e0566 100644 --- a/server/sockets/socket-server.js +++ b/server/sockets/socket-server.js @@ -59,8 +59,8 @@ io.on('connection', (socket) => { }) // cardHandToDeck event listner - socket.on('cardHandToDeck', (ids) => { - io.in(roomname).emit('cardsInDeck', ids); + socket.on('cardHandToDeck', (data) => { + io.in(data.roomname).emit('cardsInDeck', data.ids); }) // endGame event listner socket.on('endGame',(data)=>{ From 07fc98bdfc46423620f88a4551d4756c9443fd68 Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Fri, 14 Aug 2020 21:52:02 +0530 Subject: [PATCH 08/13] Delete rooms.js --- server/models/rooms.js | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 server/models/rooms.js diff --git a/server/models/rooms.js b/server/models/rooms.js deleted file mode 100644 index 1cc6b83..0000000 --- a/server/models/rooms.js +++ /dev/null @@ -1,9 +0,0 @@ -const mongoose = require('mongoose'); -const ttl = require('mongoose-ttl'); - -const roomSchema = new mongoose.Schema({ - Roomname :{ type:String, unique:true}, -}); -roomSchema.plugin(ttl, { ttl: '2m' }); -const Room = mongoose.model('room', roomSchema,); -module.exports = Room \ No newline at end of file From 6f720dabf9c00c7a2defcf26f6e65afc3213e5e6 Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Sat, 15 Aug 2020 17:33:28 +0530 Subject: [PATCH 09/13] made requested changes-1 left --- package.json | 1 - server/sockets/socket-server.js | 14 ++++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 5edb77d..7554983 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,6 @@ "mongodb": "^3.5.4", "mongoose": "^5.9.4", "mongoose-findorcreate": "^3.0.0", - "mongoose-ttl": "0.0.3", "passport": "^0.4.1", "passport-google-oauth20": "^2.0.0", "passport-local": "^1.0.0", diff --git a/server/sockets/socket-server.js b/server/sockets/socket-server.js index b2e0566..6a80247 100644 --- a/server/sockets/socket-server.js +++ b/server/sockets/socket-server.js @@ -5,8 +5,9 @@ io.on('connection', (socket) => { console.log('connected') // join event listner socket.once('join', function (roomname) { + let people = io.nsps['/'].adapter.rooms[roomname] // checks for maximum users and if game started? - if ((io.nsps['/'].adapter.rooms[roomname] && io.nsps['/'].adapter.rooms[roomname].length > 11) || (io.nsps['/'].adapter.rooms[roomname] && io.nsps['/'].adapter.rooms[roomname].allowed != undefined)) { + if ((people && people.length > 11) || (people && people.allowed != undefined)) { } else { socket.join(roomname) // if passed checks joins room socket.broadcast.emit('broadcast', 'new player joined'); // brodcast every other a player has joined @@ -16,7 +17,7 @@ io.on('connection', (socket) => { // set username event listner socket.on('setUsername', function (data) { - var usernameTaken = 0; // var for checking unique username + let usernameTaken = 0; // var for checking unique username io.in(data.roomname).clients((error, clients) => { // getting all clients in room if (error) throw error; // loop for checking username of every other player with given username @@ -42,16 +43,17 @@ io.on('connection', (socket) => { // gameStart listner socket.on('gameStart', (data) => { - var usernames = []; // array for storing usernames + let usernames = []; // array for storing usernames + let people = io.nsps['/'].adapter.rooms[data.roomname] io.in(data.roomname).clients((error, clients) => { // getting all clients in a room if (error) throw error; clients.forEach(client => { - var person = io.sockets.sockets[client] + let person = io.sockets.sockets[client] usernames.push(person.username) // adding their username to usernames array }); }) - if (io.nsps['/'].adapter.rooms[data.roomname].length > 1) { - io.nsps['/'].adapter.rooms[data.roomname].allowed = 1; // setting var for game started true + if (people.length > 1) { + people.allowed = 1; // setting var for game started true io.in(data.roomname).emit('usersList', usernames) // emitting usernames list to clients } else { io.in(data.roomname).emit('lessPlayers', 'need more to start game') From 701ce2b87702aa185aed18dc1b33f706f734d553 Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Sat, 15 Aug 2020 20:27:20 +0530 Subject: [PATCH 10/13] made requested changes --- server/sockets/socket-server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/sockets/socket-server.js b/server/sockets/socket-server.js index 6a80247..4459451 100644 --- a/server/sockets/socket-server.js +++ b/server/sockets/socket-server.js @@ -22,7 +22,7 @@ io.on('connection', (socket) => { if (error) throw error; // loop for checking username of every other player with given username for (var i = 0; i < clients.length; i++) { - var user = io.sockets.sockets[clients[i]]; // saving socket into user + const user = io.sockets.sockets[clients[i]]; // saving socket into user if (user.username == data.username) { // if equal therfore username taken usernameTaken = 1; // setting var to 1 From 4e2fa805a0c4c6034590b4c252ab3a3ac574b486 Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Tue, 18 Aug 2020 06:29:46 +0530 Subject: [PATCH 11/13] step-3 added cards shuffling --- server/routers/index.js | 2 +- server/sockets/socket-server.js | 38 ++++++++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/server/routers/index.js b/server/routers/index.js index 3bd3f73..08cc546 100644 --- a/server/routers/index.js +++ b/server/routers/index.js @@ -7,7 +7,7 @@ const passport = require('passport') // index route router.get('', (req, res) => { - res.redirect('/rooms') + res.render('index') }) // google auth entry route diff --git a/server/sockets/socket-server.js b/server/sockets/socket-server.js index 4459451..d6ba1c1 100644 --- a/server/sockets/socket-server.js +++ b/server/sockets/socket-server.js @@ -22,7 +22,7 @@ io.on('connection', (socket) => { if (error) throw error; // loop for checking username of every other player with given username for (var i = 0; i < clients.length; i++) { - const user = io.sockets.sockets[clients[i]]; // saving socket into user + var user = io.sockets.sockets[clients[i]]; // saving socket into user if (user.username == data.username) { // if equal therfore username taken usernameTaken = 1; // setting var to 1 @@ -55,10 +55,42 @@ io.on('connection', (socket) => { if (people.length > 1) { people.allowed = 1; // setting var for game started true io.in(data.roomname).emit('usersList', usernames) // emitting usernames list to clients + let players = people.length //no of players + //shuffled cards array + for (var a=[],i=0;i<54;++i) a[i]=i; + + function shuffle(array) { + var tmp, current, top = array.length; + if(top) while(--top) { + current = Math.floor(Math.random() * (top + 1)); + tmp = array[current]; + array[current] = array[top]; + array[top] = tmp; + } + return array; + } + + a = shuffle(a); //shuffles cards array a + var playerscards = new Array(players); //creating arrays for storing playerscards + for(var i=0;i { From ceae38143a1a19c27402cad3d6ff936cbdf871d6 Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Tue, 18 Aug 2020 06:36:55 +0530 Subject: [PATCH 12/13] Update socket-server.js --- server/sockets/socket-server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/sockets/socket-server.js b/server/sockets/socket-server.js index d6ba1c1..00ce62f 100644 --- a/server/sockets/socket-server.js +++ b/server/sockets/socket-server.js @@ -22,7 +22,7 @@ io.on('connection', (socket) => { if (error) throw error; // loop for checking username of every other player with given username for (var i = 0; i < clients.length; i++) { - var user = io.sockets.sockets[clients[i]]; // saving socket into user + const user = io.sockets.sockets[clients[i]]; // saving socket into user if (user.username == data.username) { // if equal therfore username taken usernameTaken = 1; // setting var to 1 From b7694fa7b7224c2f0883d86635a37c4077565edd Mon Sep 17 00:00:00 2001 From: SARVASVA KHARE <64934816+sarvasvaKhare@users.noreply.github.com> Date: Tue, 18 Aug 2020 20:03:27 +0530 Subject: [PATCH 13/13] done requested changes --- server/sockets/socket-server.js | 129 +++++++++++++++++--------------- 1 file changed, 68 insertions(+), 61 deletions(-) diff --git a/server/sockets/socket-server.js b/server/sockets/socket-server.js index 00ce62f..dad5548 100644 --- a/server/sockets/socket-server.js +++ b/server/sockets/socket-server.js @@ -1,108 +1,115 @@ -const {io} = require('./../index') +const { io } = require('./../index') // on connecting with client socket io.on('connection', (socket) => { console.log('connected') // join event listner socket.once('join', function (roomname) { - let people = io.nsps['/'].adapter.rooms[roomname] + const people = io.nsps['/'].adapter.rooms[roomname] // checks for maximum users and if game started? - if ((people && people.length > 11) || (people && people.allowed != undefined)) { + + if ((people && people.length > 11) || (people && people.allowed !== undefined)) { } else { - socket.join(roomname) // if passed checks joins room - socket.broadcast.emit('broadcast', 'new player joined'); // brodcast every other a player has joined - socket.emit('connectToRoom', "You are in room " + roomname) // emit user the roomname + socket.join(roomname) // if passed checks joins room + socket.broadcast.emit('broadcast', 'new player joined') // brodcast every other a player has joined + socket.emit('connectToRoom', 'You are in room ' + roomname) // emit user the roomname } }) // set username event listner socket.on('setUsername', function (data) { - let usernameTaken = 0; // var for checking unique username - io.in(data.roomname).clients((error, clients) => { // getting all clients in room - if (error) throw error; + let usernameTaken = 0 // var for checking unique username + io.in(data.roomname).clients((error, clients) => { // getting all clients in room + if (error) throw error // loop for checking username of every other player with given username for (var i = 0; i < clients.length; i++) { - const user = io.sockets.sockets[clients[i]]; // saving socket into user + var user = io.sockets.sockets[clients[i]] // saving socket into user - if (user.username == data.username) { // if equal therfore username taken - usernameTaken = 1; // setting var to 1 - break; // break from loop + if (user.username === data.username) { // if equal therfore username taken + usernameTaken = 1 // setting var to 1 + break // break from loop } } if (!usernameTaken) { - socket.username = data.username // setting username in socket of that client - socket.emit('userSet', { username: data.username }) // emiting username to client side + socket.username = data.username // setting username in socket of that client + socket.emit('userSet', { username: data.username }) // emiting username to client side } else { // emitting dupilicate username to client side - socket.emit('userExists', data.username + ' username is taken! Try some other username.'); - socket.emit('newPrompt'); //emitting new Prompt for new username + socket.emit('userExists', data.username + ' username is taken! Try some other username.') + socket.emit('newPrompt') // emitting new Prompt for new username } }) - }); + }) // gameStart listner socket.on('gameStart', (data) => { - let usernames = []; // array for storing usernames - let people = io.nsps['/'].adapter.rooms[data.roomname] - io.in(data.roomname).clients((error, clients) => { // getting all clients in a room - if (error) throw error; + const usernames = [] // array for storing usernames + const people = io.nsps['/'].adapter.rooms[data.roomname] + io.in(data.roomname).clients((error, clients) => { // getting all clients in a room + if (error) throw error clients.forEach(client => { - let person = io.sockets.sockets[client] - usernames.push(person.username) // adding their username to usernames array - }); + const person = io.sockets.sockets[client] + usernames.push(person.username) // adding their username to usernames array + }) }) if (people.length > 1) { - people.allowed = 1; // setting var for game started true - io.in(data.roomname).emit('usersList', usernames) // emitting usernames list to clients - let players = people.length //no of players - //shuffled cards array - for (var a=[],i=0;i<54;++i) a[i]=i; - - function shuffle(array) { - var tmp, current, top = array.length; - if(top) while(--top) { - current = Math.floor(Math.random() * (top + 1)); - tmp = array[current]; - array[current] = array[top]; - array[top] = tmp; - } - return array; + people.allowed = 1 // setting var for game started true + io.in(data.roomname).emit('usersList', usernames) // emitting usernames list to clients + const players = people.length // no of players + // shuffled cards array + var cards = 54 + if (players > 4 && players < 10) { + cards = 108 + } else if (players > 9) { + cards = 162 } - - a = shuffle(a); //shuffles cards array a - var playerscards = new Array(players); //creating arrays for storing playerscards - for(var i=0;i { - io.in(data.roomname).emit('cardsInDeck', data.ids); + io.in(data.roomname).emit('cardsInDeck', data.ids) }) // endGame event listner - socket.on('endGame',(data)=>{ - io.in(data.roomname).emit('redirect','/') + socket.on('endGame', (data) => { + io.in(data.roomname).emit('redirect', '/') }) // dissconection event socket.once('disconnect', function () { console.log('disconnected') }) }) - +function shuffle (array) { + let tmp; let current; let top = array.length + if (top) { + while (--top) { + current = Math.floor(Math.random() * (top + 1)) + tmp = array[current] + array[current] = array[top] + array[top] = tmp + } + } + return array +}