diff --git a/src/channel/channel.js b/src/channel/channel.js index f58ba98c..5e08fbe0 100644 --- a/src/channel/channel.js +++ b/src/channel/channel.js @@ -322,22 +322,31 @@ Channel.prototype.joinUser = function (user, data) { return; } - if (self.is(Flags.C_REGISTERED)) { - user.waitFlag(Flags.U_LOGGED_IN, () => { - user.refreshAccount({ - channel: self.name, - name: user.getName() - }, function (err, account) { - if (err) { - Logger.errlog.log("user.refreshAccount failed at Channel.joinUser"); - Logger.errlog.log(err.stack); - self.refCounter.unref("Channel::user"); - return; - } + function refreshUserAccount(cb) { + user.refreshAccount({ + channel: self.name, + name: user.getName() + }, function (err, account) { + if (err) { + Logger.errlog.log("user.refreshAccount failed at Channel.joinUser"); + Logger.errlog.log(err.stack); + self.refCounter.unref("Channel::user"); + return; + } - afterAccount(); - }); + if (cb) { + process.nextTick(cb); + } }); + } + + if (self.is(Flags.C_REGISTERED) && user.is(Flags.U_LOGGED_IN)) { + refreshUserAccount(afterAccount); + } else if (self.is(Flags.C_REGISTERED)) { + user.waitFlag(Flags.U_LOGGED_IN, () => { + refreshUserAccount(); + }); + afterAccount(); } else { afterAccount(); } diff --git a/src/user.js b/src/user.js index bbb6d7e9..bb03a7eb 100644 --- a/src/user.js +++ b/src/user.js @@ -301,7 +301,6 @@ User.prototype.login = function (name, pw) { name: user.name }); db.recordVisit(self.realip, self.getName()); - self.socket.emit("rank", self.account.effectiveRank); Logger.syslog.log(self.realip + " logged in as " + user.name); self.setFlag(Flags.U_LOGGED_IN); self.clearFlag(Flags.U_LOGGING_IN); @@ -388,7 +387,6 @@ User.prototype.guestLogin = function (name) { guest: true }); db.recordVisit(self.realip, self.getName()); - self.socket.emit("rank", 0); Logger.syslog.log(self.realip + " signed in as " + name); self.setFlag(Flags.U_LOGGED_IN); self.emit("login", self.account); @@ -443,6 +441,7 @@ User.prototype.refreshAccount = function (opts, cb) { } self.account = account; if (account.effectiveRank !== old.effectiveRank) { + self.socket.emit("rank", self.account.effectiveRank); self.emit("effectiveRankChange", self.account.effectiveRank); } }