From 5aa942f61eaa378f96fdf336beff023a4dc270bb Mon Sep 17 00:00:00 2001 From: jainkeval Date: Sun, 25 Feb 2018 15:45:50 +0530 Subject: [PATCH] feat: Select a user randomly from available users (#101) --- globals.js | 2 +- public/js/chat.js | 7 +-- socketserver.js | 114 +++++++++++++++++++++++++++------------------- 3 files changed, 72 insertions(+), 51 deletions(-) diff --git a/globals.js b/globals.js index d6cc4ebd..8c682f57 100644 --- a/globals.js +++ b/globals.js @@ -1,5 +1,5 @@ // All globals here. - global.onlineUsers = []; +global.availableUsers = []; global.rooms = []; global.queue = []; diff --git a/public/js/chat.js b/public/js/chat.js index 7de0fc28..7dd1aad1 100644 --- a/public/js/chat.js +++ b/public/js/chat.js @@ -7,6 +7,9 @@ socket.on('ack', (d) => { console.log(`Received: ${d}`); + socket.emit('privateRoom', { + "room": "private room" + }); }); let message = document.querySelector('#message'); @@ -15,9 +18,7 @@ let newbtn = document.querySelector('#newbtn'); let close = document.querySelector('#close'); let cancel = document.querySelector('#cancel'); - socket.emit('privateRoom', { - "room": "private room" - }); + socket.on('toast', (data) => { toastr.options = { diff --git a/socketserver.js b/socketserver.js index 334957be..a6a25d9b 100644 --- a/socketserver.js +++ b/socketserver.js @@ -9,60 +9,80 @@ const moment = require('moment'); require('./globals.js'); module.exports = (io, app) => { io.on('connection', (socket) => { - // Make a user object and add it to the onlineUsers list and rooms too(maybe we can add to room once we have the partner.) - socket.emit('ack', { id: socket.id, msg: "User connected" }); - onlineUsers.push(socket); - socket.on('privateRoom', (user) => { - let unfilledRooms = rooms.filter((room) => { - if (!room.isFilled) { - console.log(room.roomID); - return room; - } - }); - console.log(`Unfilled Rooms: ${JSON.stringify(unfilledRooms[0])}`); - try { - // join the existing room. - socket.join(unfilledRooms[0].roomID); - let index = rooms.indexOf(unfilledRooms[0]); - rooms[index].isFilled = true; - unfilledRooms[0].isFilled = true; - socket.emit('private ack', { "message": "Added to privateRoom", "roomID": unfilledRooms[0].roomID }); - socket.roomID = unfilledRooms[0].roomID; - io.sockets.in(socket.roomID).emit('toast', { "message": "You are connected with a stranger!"}) - console.log(`Joined existing room: ${unfilledRooms[0].roomID}`); - console.log(`--------------------------------------------`); - } - catch(e) { - // dont have unfilled rooms. Thus creating a new user. - let uID = uniqueID(); - console.log(`Created new room: ${uID}`); - rooms.push({ "roomID": uID, "isFilled": false }); - socket.join(uID); - socket.roomID = uID; - console.log(`Socket joined in room with id: ${uID}`); - socket.emit('private ack', { "message": "Added to privateRoom", "roomID": uID }); - // console.log(`Current status of rooms: ${rooms}`); - console.log(`--------------------------------------------`); + //push the user to avilable users list + availableUsers.push(socket); + function resolveAfter2Seconds() { + return new Promise(resolve => { + setTimeout(() => { + resolve('resolved'); + }, 5000); + }); } - // create an unique id here. - // let uID = uniqueID(); - // console.log(uID); - // rooms.push({ "roomID": uID, "isFilled": false }); - // // Maintain a global room array which would store the room ids. - // socket.join(uID); - // // emit the room id to the frontend side. - // socket.emit('private ack', { "message": "Added to privateRoom", "roomID": uID }); - }); + async function asyncCall() { + + let result = await resolveAfter2Seconds(); + //get index of randomly selected user from the available users list + let selected = Math.floor(Math.random()*availableUsers.length); + //store the user in Socket + socket = availableUsers[selected]; + //remove the randomly selected user from the available users list + availableUsers.splice(selected,1); + // Make a user object and add it to the onlineUsers list and rooms too(maybe we can add to room once we have the partner.) + + // create an unique id here. + // let uID = uniqueID(); + // console.log(uID); + // rooms.push({ "roomID": uID, "isFilled": false }); + // // Maintain a global room array which would store the room ids. + // socket.join(uID); + // // emit the room id to the frontend side. + // socket.emit('private ack', { "message": "Added to privateRoom", "roomID": uID }); + socket.emit('ack', { id: socket.id, msg: "User connected" }); + onlineUsers.push(socket); + + socket.on('privateRoom', (user) => { + let unfilledRooms = rooms.filter((room) => { + if (!room.isFilled) { + console.log("sskdfjn"); + console.log(room.roomID); + return room; + } + }); + console.log(`Unfilled Rooms: ${JSON.stringify(unfilledRooms[0])}`); + try { + // join the existing room. + socket.join(unfilledRooms[0].roomID); + let index = rooms.indexOf(unfilledRooms[0]); + rooms[index].isFilled = true; + unfilledRooms[0].isFilled = true; + socket.emit('private ack', { "message": "Added to privateRoom", "roomID": unfilledRooms[0].roomID }); + socket.roomID = unfilledRooms[0].roomID; + io.sockets.in(socket.roomID).emit('toast', { "message": "You are connected with a stranger!"}) + console.log(`Joined existing room: ${unfilledRooms[0].roomID}`); + console.log(`--------------------------------------------`); + } + catch(e) { + // dont have unfilled rooms. Thus creating a new user. + let uID = uniqueID(); + console.log(`Created new room: ${uID}`); + rooms.push({ "roomID": uID, "isFilled": false }); + socket.join(uID); + socket.roomID = uID; + console.log(`Socket joined in room with id: ${uID}`); + socket.emit('private ack', { "message": "Added to privateRoom", "roomID": uID }); + // console.log(`Current status of rooms: ${rooms}`); + console.log(`--------------------------------------------`); + } + }); + + } + asyncCall(); socket.on('sendMessage', (data) => { let timeStamp = moment().format('LT'); io.sockets.in(data.room).emit('newMessage', { "message": data , "senderId": socket.id, "timeStamp": timeStamp}); }); - socket.on('typing', (data) => { - io.sockets.in(data.room).emit('addTyping', { "senderId": socket.id, "typingStatus": data.typingStatus }); - }); - // Disconnect the user socket.on('disconnect', () => { let index = onlineUsers.indexOf(socket);