Create separate rooms based on Pin code in the URL in socket io

289
December 31, 2017, at 12:46 PM

I'm new in node js and socket io, I'm trying to create interactive quizzes based on pin code given in the url for ex: http://domain/start/5555 should create a quiz page with name 5555 and when clients have the pin code they can connect to this quiz. So it means i have to have a quiz page which shows all connected clients for example but i have some prblems with io.sockets.in(pincode).emit() because i don't know if i'm creating rooms correctly or not! here is my code

Client.js

var socket = io();
socket.on('connect', function () {
    var params = jQuery.deparam(window.location.search);// To get the name and the room
    socket.emit('join', params, function (err) {
        if (err) {
            alert(err);
            window.location.href = '/join.html';
        } else {
            console.log('No error');
        }
    });
});

Server.js

app.get('/start/:pincode', (req, res) => {
io.on('connection', (socket) => { // to rigester connection listener
    console.log('New user is connected');
    // When somebody connects it verifies if the name and the room are valid strings
    socket.on('join', (params, callback) => {
        if (!isRealSrting(params.name) || !isRealSrting(params.pincode)) {
            return callback('Name and pincode are required');
        }
        socket.join(params.pincode);
        users.removeUser(socket.id);//Remove the user from other places
        users.addUser(socket.id, params.name, params.pincode);
        var x = users.getUserList(params.pincode);
        console.log(x);
        io.sockets.in(params.pincode).emit('updateUserList', { //here it doesn't work i don't know why!
            users: users.getUserList(params.pincode),
            pincode: params.pincode
        });
        socket.emit('newMessage', {
            user: params.name,
            pincode: params.pincode,
            readyMessage: 'You are connected'
        });// when the user connect to the server he gets this message
        callback();
    });
    socket.on('disconnect', () => {
        var user = users.removeUser(socket.id);
        if (user) {
            io.emit('updateUserList', users.getUserList(user.pincode));
            //io.to(user.room).emit('newMessage', generateMessage('Admin', `${user.name} has left`));
        }
    });
});
res.render('start.hbs', {
    pincode: req.params.pincode
});
});

and the main page Start.js

var socket = io();
var pincode;
socket.on('updateUserList', function (users) {
   console.log('here');
   var ol = jQuery('<ol></ol>');
   var usercount = users.users.length; // Players number
   pincode = users.pincode;    
});

Any help or suggestion please?

Rent Charter Buses Company
READ ALSO
Trying to insert multiple documents/records into MongoDB via a POST request using NodeJS

Trying to insert multiple documents/records into MongoDB via a POST request using NodeJS

I am currently building an API using MongoDB and NodeJS, and I have the following block of code to do a POST request:

202
What is he correct way to handle promise rejections with async/await in node.js

What is he correct way to handle promise rejections with async/await in node.js

I have the following function for handling a user registration in nodejs v8

225
beginner node: run shell command in series while updating the front-end

beginner node: run shell command in series while updating the front-end

Im trying to build an online converter, and I'm facing an issue I can't solveIt's been days, and it's driving me NUTS

206
sequelize raw query, format of columns

sequelize raw query, format of columns

In a raw query I want to know the definition of each resulting column, in particular the formatIs that possible using the API?

360