From f90965c105cd40124bbfaaac68f8a265afd793cf Mon Sep 17 00:00:00 2001 From: calzoneman Date: Fri, 30 Aug 2013 18:42:00 -0500 Subject: [PATCH] Fix login race condition which caused rank loss --- channel.js | 15 ++++++++++++++- user.js | 8 ++++++-- www/assets/js/callbacks.js | 2 ++ www/assets/js/util.js | 2 +- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/channel.js b/channel.js index c29a0750..f7ac65ee 100644 --- a/channel.js +++ b/channel.js @@ -472,6 +472,8 @@ Channel.prototype.getRank = function (name, callback) { Channel.prototype.saveRank = function (user, callback) { if(!this.registered) return; + if(!user.saverank) + return; this.server.db.setChannelRank(this.name, user.name, user.rank, callback); } @@ -728,6 +730,7 @@ Channel.prototype.search = function(query, callback) { /* REGION User interaction */ Channel.prototype.userJoin = function(user) { + var self = this; var parts = user.ip.split("."); var slash24 = parts[0] + "." + parts[1] + "." + parts[2]; // GTFO @@ -758,7 +761,17 @@ Channel.prototype.userJoin = function(user) { this.users.push(user); this.broadcastVoteskipUpdate(); if(user.name != "") { - this.broadcastNewUser(user); + self.getRank(user.name, function (err, rank) { + if(err) { + user.rank = user.global_rank; + user.saverank = false; + } else { + user.saverank = true; + user.rank = rank; + } + user.socket.emit("rank", rank); + self.broadcastNewUser(user); + }); } this.broadcastUsercount(); diff --git a/user.js b/user.js index e7e346cf..fbb5a729 100644 --- a/user.js +++ b/user.js @@ -20,6 +20,7 @@ var User = function(socket, Server) { this.server = Server; this.socket = socket; this.loggedIn = false; + this.saverank = false; this.rank = Rank.Anonymous; this.global_rank = Rank.Anonymous; this.channel = null; @@ -668,10 +669,13 @@ User.prototype.login = function(name, pw, session) { }; if(self.channel !== null) { self.channel.getRank(name, function (err, rank) { - if(!err) + if(!err) { + self.saverank = true; self.rank = rank; - else + } else { + self.saverank = false; self.rank = self.global_rank; + } afterRankLookup(); }); } else { diff --git a/www/assets/js/callbacks.js b/www/assets/js/callbacks.js index de3d2b5e..1733fd54 100644 --- a/www/assets/js/callbacks.js +++ b/www/assets/js/callbacks.js @@ -43,9 +43,11 @@ Callbacks = { /* fired when socket connection completes */ connect: function() { + setTimeout(function () { socket.emit("joinChannel", { name: CHANNEL.name }); + }, 2000); if(NAME && SESSION) { socket.emit("login", { name: NAME, diff --git a/www/assets/js/util.js b/www/assets/js/util.js index 9532a3d0..0c6eda49 100644 --- a/www/assets/js/util.js +++ b/www/assets/js/util.js @@ -969,7 +969,7 @@ function handleModPermissions() { function handlePermissionChange() { if(CLIENT.rank >= 2) { $("#channelsettingswrap3").show(); - if($("#channelsettingswrap").html() == "") { + if($("#channelsettingswrap").html().trim() == "") { $("#channelsettingswrap").load("channeloptions.html", handleModPermissions); } else {