// 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);
};
* 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
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);
+ });
+ }
});
};
*/
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);
+ }
+ });
+ }
};
/**
timer = setInterval(step, 50);
};
+ // Prompt for name and send it
+ var chooseNickname = function(msg) {
+ msg = msg
+ ? '<span class="label label-important">' + msg + '</span><br/>Try with another one:'
+ : 'What\'s your name?';
+
+ if ($modal.hasClass('in')) {
+ $('.modal-body p').html(msg);
+ return $('#login').focus();
+ }
+
+ var html = [
+ '<div class="modal-header">'
+ , '<h3>You are joining the ' + roomname + ' room</h3>'
+ , '</div>'
+ , '<div class="modal-body">'
+ , '<p>' + msg + '</p>'
+ , '</div>'
+ , '<div class="modal-footer relative">'
+ , '<input id="login" maxlength="15" type="text" name="nickname" />'
+ , '<button id="join" class="btn btn-success">'
+ , '<i class="icon-user icon-white"></i> Join the game'
+ , '</button>'
+ , '<span class="divider">'
+ , '<span>or</span>'
+ , '</span>'
+ , '<a class="btn btn-primary" href="/login?followup=/' + roomname + '">'
+ , '<i class="icon-lock icon-white"></i> Login'
+ , '</a>'
+ , '</div>'
+ ].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');
});
};
- // Submitted name was invalid
- var invalidNickName = function(feedback) {
- feedback = '<span class="label label-important">' + feedback + '</span>';
- joinUnauthenticated(feedback + '<br/>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 = [
- '<div class="modal-header">'
- , '<h3>You are joining the ' + roomname + ' room</h3>'
- , '</div>'
- , '<div class="modal-body">'
- , '<p>' + (msg || 'What\'s your name?') + '</p>'
- , '</div>'
- , '<div class="modal-footer relative">'
- , '<input id="login" maxlength="15" type="text" name="nickname" />'
- , '<button id="join" class="btn btn-success">'
- , '<i class="icon-user icon-white"></i> Join the game'
- , '</button>'
- , '<span class="divider">'
- , '<span>or</span>'
- , '</span>'
- , '<a class="btn btn-primary" href="/login?followup=/' + roomname + '">'
- , '<i class="icon-lock icon-white"></i> Login'
- , '</a>'
- , '</div>'
- ].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;
};
};
// 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();
$messagebox.on('keydown', function(event) {
if (event.keyCode === 13) {
- var value = $.trim($messagebox.val());
+ var value = $messagebox.val().trim();
$messagebox.val('');
if (value) {
$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) {
? 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);
})();