// Prompt for name and send it.
var joinRoom = function(msg) {
- if (!msg) {
- msg = "What's your name?";
-
- var html = '<div class="modal-header"><h3>You are joining the '+roomname+' room</h3></div>';
- html += '<div class="modal-body"><p>'+msg+'</p></div>';
- html += '<div class="modal-footer">';
- html += '<input id="login" class="" type="text" name="nickname" />';
- html += '<button id="join" class="btn btn-primary">';
- html += '<i class="icon-user icon-white"></i> Join the game</button></div>';
-
- $(html).appendTo(DOM.modal);
- var login = $('#login');
- var button = $('#join');
- button.click(function() {
- var val = $.trim(login.val());
- if (val !== "") {
- nickname = val;
- socket.emit('joinroom', {nickname:nickname,roomname:roomname});
- }
- else {
- var txt = "Nickname can't be empty.";
- invalidNickName('<span class="label label-important">'+txt+'</span>');
- }
- login.val("");
- });
- login.keyup(function(event) {
- if (event.keyCode === 13) {
- button.click();
- }
- });
- DOM.modal.modal('show');
- DOM.modal.on('shown', function() {
- login.focus();
- });
+ if (/nickname\s*\=/.test(document.cookie) && !msg) {
+ nickname = unescape(document.cookie.replace(/.*nickname\s*\=\s*([^;]*);?.*/, "$1"));
+ socket.emit('joinroom', {nickname:nickname,roomname:roomname});
}
else {
- $('.modal-body p').html(msg);
- $('#login').focus();
+ if (!$('body').hasClass('modal-open')) {
+ var html = '<div class="modal-header"><h3>You are joining the '+roomname+' room</h3></div>';
+ html += '<div class="modal-body"><p>'+(msg || "What's your name?")+'</p></div>';
+ html += '<div class="modal-footer">';
+ html += '<input id="login" class="" type="text" name="nickname" />';
+ html += '<button id="join" class="btn btn-primary">';
+ html += '<i class="icon-user icon-white"></i> Join the game</button></div>';
+
+ $(html).appendTo(DOM.modal);
+ var login = $('#login');
+ var button = $('#join');
+ button.click(function() {
+ var val = $.trim(login.val());
+ if (val !== "") {
+ nickname = val;
+ socket.emit('joinroom', {nickname:nickname,roomname:roomname});
+ }
+ else {
+ var txt = "Nickname can't be empty.";
+ invalidNickName('<span class="label label-important">'+txt+'</span>');
+ }
+ login.val("");
+ });
+ login.keyup(function(event) {
+ if (event.keyCode === 13) {
+ button.click();
+ }
+ });
+ DOM.modal.modal('show');
+ DOM.modal.on('shown', function() {
+ login.focus();
+ });
+ }
+ else {
+ $('.modal-body p').html(msg);
+ $('#login').focus();
+ }
}
};
// Your submitted name was invalid
var invalidNickName = function(feedback) {
- joinRoom(feedback+"<br/>Try again:");
+ joinRoom(feedback+"<br/>Try with another one:");
};
// You joined the game
var ready = function(data) {
+ if (!/nickname\s*\=/.test(document.cookie)) {
+ document.cookie = "nickname="+escape(nickname)+";path=/;";
+ }
DOM.modal.modal('hide').empty();
$('#total-tracks span').text(data.trackscount);
var msg = nickname+" joined the game";
}
},
swfPath: "/static/swf/",
+ solution: "flash, html",
supplied: "m4a",
preload: "auto",
volume: 1
return false;
};
+var sockets = Object.create(null);
+
+var getUserSocket = function(nickname) {
+ return sockets[nickname];
+};
+
function Room(name) {
var roomname = name;
var totusers = 0;
- var sockets = Object.create(null);
var usersData = Object.create(null);
var playedtracks = []; // Used to prevent the same song from playing twice in one game
var artworkUrl = null;
var trackViewUrl = null;
var finishline = 1;
- var guesstime = false;
+ var allowedguess = false;
var status = null;
var songtimeleft = null; // Milliseconds
var songcounter = 0;
}
return false;
};
-
- var getUserSocket = function(nickname) {
- return sockets[nickname];
- };
// A user requested an invalid name
var invalidNickName = function(socket, feedback) {
else if (data.nickname === "Binb") {
feedback = '<span class="label label-important">That name is reserved.</span>';
}
- else if (userExists(data.nickname)) {
- feedback = '<span class="label label-important">That name is alredy taken.</span>';
+ else if (getUserSocket(data.nickname)) {
+ feedback = '<span class="label label-important">Name already taken.</span>';
}
if (feedback) {
return invalidNickName(socket, feedback);
this.sendChatMessage = function (socket, data) {
if (typeof data === "string") {
var datalcase = data.toLowerCase();
- if (guesstime && (amatch(artistlcase, datalcase, true) ||
+ if (allowedguess && (amatch(artistlcase, datalcase, true) ||
amatch(tracklcase, datalcase))) {
var msg = "You are probably right, but you have to use the box above.";
socket.emit('chatmsg', {from:"Binb",to:socket.nickname,chatmsg:msg});
};
this.guess = function(socket, guess) {
- if (guesstime) {
+ if (allowedguess) {
if (!usersData[socket.nickname].matched) { // No track no artist
if ((artistlcase === tracklcase) && amatch(tracklcase, guess, true)) {
addPoints(socket, true);
io.sockets.in(roomname).emit('playtrack', {counter:songcounter,tot:config.songsinarun,
users:usersData});
songTimeLeft(Date.now()+30000, 50);
- guesstime = true;
+ allowedguess = true;
setTimeout(sendTrackInfo, 30000);
};
trackName:trackName,collectionName:collectionName,
trackViewUrl:trackViewUrl});
finishline = 1;
- guesstime = false;
+ allowedguess = false;
if (songcounter < config.songsinarun) {
resetPoints(true);
sendLoadTrack();
};
this.sendStatus = function(socket) {
- socket.emit('status', {status:status,timeleft:songtimeleft,
- previewUrl:previewUrl});
+ socket.emit('status', {status:status,timeleft:songtimeleft,previewUrl:previewUrl});
};
var reset = function() {