UserManager = class("UserManager") function UserManager:ctor() -- 已使用过的用户列表 self.sigleUser = {} self.multiUser = {} self.userInfoKey = "userInfoKeyForSG" self.fileName = "UserList.json" -- 是否单用户模式 self.sigleMode = true; if cc.Application:getInstance():getTargetPlatform() == 0 or app.config.isDebugLogion then self.sigleMode = false; else self.sigleMode = true; end self.PCRememberWord = 0 -- 监听用户登录成功 app.user:addEventListener("onLoginSuccessed", function() self:addUser() end); app.user:addEventListener("updateWxUserInfo", handler(self,self.addUser)); self:loadFile() end function UserManager:loadFile() logD("UserManager:loadFile()") -- 单用户模式下需要检查授权的有效期 if self.sigleMode then logD("UserManager:loadFile() sigleUser") local jsonString = loadUserInfo(self.userInfoKey) logD("UserManager:loadFile() sigleUser jsonString = ", jsonString); if not jsonString then return end self.sigleUser = json.decode(jsonString) or {} self.initUserRememberPW = self.sigleUser.nRememberPW; local timeOld = self.sigleUser.time or 0 local timeNow = os.time(); logD("UserManager:loadFile() sigleUser, timeOld = ", timeOld) logD("UserManager:loadFile() sigleUser, timeNow = ", timeNow) if timeNow - timeOld > 7 * 24 * 3600 then self.sigleUser = {} self:saveFile(); end else logD("UserManager:loadFile() multiUser") self.multiUser = {} jsonString = loadStringFromFile(self.fileName) if jsonString then self.multiUser = json.decode(jsonString) or {} end end end function UserManager:saveFile() logD("UserManager::saveFile()") if self.sigleMode then local jsonString = json.encode(self.sigleUser) logD("UserManager::saveFile() sigleUser jsonString = ", jsonString) saveUserInfo(self.userInfoKey, jsonString) else local jsonString = json.encode(self.multiUser) logD("UserManager::saveFile() multiUser jsonString = ", jsonString) saveStringToFile(jsonString, self.fileName) end end function UserManager:addUser(data) local response = data and data.response local forceCover = response and response.forceCover local userInfo = response and response.userInfo or app.user.userInfo; logD("UserManager::addUser() forceCover = ", forceCover) local jsonInfo = userInfo and json.decode(userInfo) or {} local userId = tonumber(jsonInfo.uid) or tonumber(app.user.loginInfo.uid); local openid = jsonInfo.openid; local unionid = jsonInfo.unionid; local loginType = jsonInfo.loginType; local phonenum = jsonInfo.phonenum; local password = jsonInfo.password; local timeNow = os.time(); local nRememberPW = self:getLoginRecordCode() or self.PCRememberWord local stUserInfo = {userId = userId, openid = openid, unionid = unionid, loginType = loginType, userInfo = userInfo, time = timeNow,nRememberPW = nRememberPW,password = password} logD("UserManager::addUser() stUserInfo = ", table.tostring(stUserInfo)) if self.sigleMode then local oldPassWord = self.sigleUser.userInfo and json.decode(self.sigleUser.userInfo).password if forceCover or self.sigleUser.userId ~= stUserInfo.userId or self.sigleUser.openid ~= stUserInfo.openid or oldPassWord ~= password or self.initUserRememberPW ~= nRememberPW or stUserInfo.loginType ~= self.sigleUser.loginType then logD("UserManager::addUser() sigleUser. update user info") self.sigleUser = stUserInfo; self:saveFile(); else logD("UserManager::addUser() sigleUser. don't update user info ") end else self.multiUser = self.multiUser or {} self.multiUser[tostring(userId)] = stUserInfo; self:saveFile(); if isWin32Platform() then app:dispatchEvent({name = "initPCAccoutList"}) end end end function UserManager:clearUserList() self.sigleUser = {} self.multiUser = {} self:saveFile() end function UserManager:hasUserInfo() if self.sigleUser and self.sigleUser.userId then return true else return false end end function UserManager:getUserInfo() if self.sigleMode then return self.sigleUser else local uid = loadUserId() if uid and self.multiUser[uid] then return self.multiUser[uid] else return nil end end end function UserManager:getUserList() self:loadFile() return self.multiUser; end function UserManager:getLoginRecordCode() if self.sigleMode then return self.sigleUser.nRememberPW or 0; else local uid = loadUserId() if uid and self.multiUser[uid] then return self.multiUser[uid].nRememberPW or self.PCRememberWord; else return self.PCRememberWord; end end end function UserManager:setLoginRecordCode(newCode) if self.sigleMode then self.sigleUser.nRememberPW = newCode else local uid = loadUserId() if uid and self.multiUser[uid] then self.multiUser[uid].nRememberPW = newCode end self.PCRememberWord = newCode end end return UserManager