From: Luigi Pinca Date: Mon, 4 Apr 2016 13:25:36 +0000 (+0200) Subject: simplified room joining logic X-Git-Url: https://git.saalbach.dev/?a=commitdiff_plain;h=7f7b1f1b516d8b42ac87c998a81c4c41c24f87e8;p=binbsis50.git simplified room joining logic --- diff --git a/lib/rooms.js b/lib/rooms.js index 6e85951..d7cca04 100644 --- a/lib/rooms.js +++ b/lib/rooms.js @@ -168,7 +168,7 @@ Room.prototype.addUser = function(spark, loggedin) { // Broadcast new user event primus.send('updateoverview', this.roomname, this.totusers); - spark.send('ready', usersData, this.trackscount, loggedin); + spark.send('ready', usersData, this.trackscount, nickname, loggedin); primus.room(this.roomname).except(spark.id).send('newuser', nickname, usersData); }; @@ -396,22 +396,20 @@ Room.prototype.onPair = function(spark, allinone) { * nickname is valid. */ -Room.prototype.onUnauthenticatedJoin = function(spark, nickname) { +Room.prototype.join = function(spark, nickname) { var feedback , room = this; if (nickname === 'binb') { feedback = 'That name is reserved.'; - } - else if (!isUsername(nickname)) { + } else if (!isUsername(nickname)) { feedback = 'Name must contain only alphanumeric characters.'; - } - else if (sparks[nickname]) { + } else if (sparks[nickname]) { feedback = 'Name already taken.'; } if (feedback) { - return spark.send('invalidnickname', feedback); + return spark.send('nickname', feedback); } // Check if requested nickname belongs to a registered user @@ -425,19 +423,19 @@ Room.prototype.onUnauthenticatedJoin = function(spark, nickname) { if (err) { console.error(err.message); - feedback = 'Could not check name availability.'; - return spark.send('invalidnickname', feedback); + return spark.send('nickname', 'Could not check name availability.'); } if (exists) { - feedback = 'That name belongs to a registered user.'; - return spark.send('invalidnickname', feedback); + return spark.send('nickname', 'That name belongs to a registered user.'); } - spark.nickname = nickname; - spark.join(room.roomname, function() { - room.addUser(spark, false); - }); + if (!spark.nickname) { + spark.nickname = nickname; + spark.join(room.roomname, function() { + room.addUser(spark, false); + }); + } }); }; diff --git a/lib/sparks.js b/lib/sparks.js index 425d914..6d63279 100644 --- a/lib/sparks.js +++ b/lib/sparks.js @@ -104,33 +104,39 @@ var authorize = function(req, authorized) { */ var connection = function(spark) { - var user = spark.request.user; - spark.on('joinauthenticated', function(room) { - if (user && ~config.rooms.indexOf(room)) { - if (sparks[user]) { // User already in a room - return spark.send('alreadyinaroom'); - } + var nickname = spark.request.cookies.nickname + , user = spark.request.user + , room = spark.query.room; + + spark.send('overview', config.rooms.reduce(function(data, room) { + data[room] = rooms[room].totusers; + return data; + }, {})); + + if (!~config.rooms.indexOf(room)) return; + + if (user) { + if (sparks[user]) { // User already in a room + spark.send('alreadyinaroom'); + } else { spark.nickname = user; spark.join(room, function() { rooms[room].addUser(spark, true); }); } - }); - spark.on('joinunauthenticated', function(nickname, room) { - if (!spark.nickname && isString(nickname) && ~config.rooms.indexOf(room)) { - rooms[room].onUnauthenticatedJoin(spark, nickname); - } - }); - spark.on('loggedin', function(callback) { - if (!isFunction(callback)) { - return; + } else { + if (isString(nickname)) { + rooms[room].join(spark, nickname); + } else { + spark.send('nickname'); } - return user ? callback(true, user) : callback(false); - }); - spark.send('overview', config.rooms.reduce(function(data, room) { - data[room] = rooms[room].totusers; - return data; - }, {})); + + spark.on('nickname', function(nickname) { + if (isString(nickname)) { + rooms[room].join(spark, nickname); + } + }); + } }; /** diff --git a/public/js/app.js b/public/js/app.js index b5afeb1..be798fc 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -438,6 +438,65 @@ timer = setInterval(step, 50); }; + // Prompt for name and send it + var chooseNickname = function(msg) { + msg = msg + ? '' + msg + '
Try with another one:' + : 'What\'s your name?'; + + if ($modal.hasClass('in')) { + $('.modal-body p').html(msg); + return $('#login').focus(); + } + + var html = [ + '' + , '' + , '' + ].join(''); + + $(html).appendTo($modal); + + var $button = $('#join') + , $login = $('#login'); + + $button.on('click', function() { + var value = $login.val(); + $login.val(''); + + if (value.trim()) { + return primus.send('nickname', value); + } + + chooseNickname('Nickname can\'t be empty.'); + }); + + $login.on('keyup', function(event) { + if (event.keyCode === 13) { + $button.click(); + } + }); + + $modal.modal('show').on('shown', function() { + $login.focus(); + }); + }; + var clearPrivate = function() { var width = $recipient.outerWidth(true) + 1; $recipient.css('margin-right', '0'); @@ -584,85 +643,6 @@ }); }; - // Submitted name was invalid - var invalidNickName = function(feedback) { - feedback = '' + feedback + ''; - joinUnauthenticated(feedback + '
Try with another one:'); - }; - - // Prompt for name and send it - var joinUnauthenticated = function(msg) { - if (/nickname\s*\=/.test(document.cookie) && !msg) { - nickname = document.cookie.replace(/.*nickname\s*\=\s*([^;]*);?.*/, '$1'); - return primus.send('joinunauthenticated', nickname, roomname); - } - - if ($modal.hasClass('in')) { - $('.modal-body p').html(msg); - return $('#login').focus(); - } - - var html = [ - '' - , '' - , '' - ].join(''); - - $(html).appendTo($modal); - - var $button = $('#join') - , $login = $('#login'); - - $button.on('click', function() { - var value = $login.val(); - $login.val(''); - - if ($.trim(value)) { - nickname = value; - return primus.send('joinunauthenticated', nickname, roomname); - } - - invalidNickName('Nickname can\'t be empty.'); - }); - - $login.on('keyup', function(event) { - if (event.keyCode === 13) { - $button.click(); - } - }); - - $modal.modal('show').on('shown', function() { - $login.focus(); - }); - }; - - var open = function() { - primus.send('loggedin', function(isloggedin, loggedinas) { - if (isloggedin) { - nickname = loggedinas; - subscriber = true; - return primus.send('joinauthenticated', roomname); - } - - joinUnauthenticated(); - }); - }; - var loadTrack = function(previewUrl) { audio.src = previewUrl; }; @@ -803,9 +783,13 @@ }; // Successfully joined the room - var ready = function(usersData, trackscount, loggedin) { - if (!loggedin && !/nickname\s*\=/.test(document.cookie)) { + var ready = function(usersData, trackscount, username, loggedin) { + nickname = username; + + if (!loggedin) { document.cookie = 'nickname=' + nickname + ';path=/;'; + } else { + subscriber = true; } $modal.modal('hide').empty(); @@ -817,7 +801,7 @@ $messagebox.on('keydown', function(event) { if (event.keyCode === 13) { - var value = $.trim($messagebox.val()); + var value = $messagebox.val().trim(); $messagebox.val(''); if (value) { @@ -837,7 +821,7 @@ $guessbox.on('keydown', function(event) { switch (event.keyCode) { case 13: // return - var guess = $.trim($guessbox.val()); + var guess = $guessbox.val().trim(); $guessbox.val(''); if (guess) { @@ -1191,13 +1175,15 @@ ? addCassetteBackdrop() : addVolumeControl(); - primus = new Primus({ strategy: false }); + primus = new Primus({ + url: location.protocol + '//' + location.host + '?room=' + roomname, + strategy: false + }); primus.on('updateoverview', updateRoomsOverview); - primus.on('invalidnickname', invalidNickName); primus.on('alreadyinaroom', alreadyInARoom); + primus.on('nickname', chooseNickname); primus.on('overview', roomsOverview); primus.on('end', disconnect); primus.on('ready', ready); - primus.on('open', open); })();