You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
4.8 KiB

  1. UserManager = class("UserManager")
  2. function UserManager:ctor()
  3. -- 已使用过的用户列表
  4. self.sigleUser = {}
  5. self.multiUser = {}
  6. self.userInfoKey = "userInfoKeyForSG"
  7. self.fileName = "UserList.json"
  8. -- 是否单用户模式
  9. self.sigleMode = true;
  10. if cc.Application:getInstance():getTargetPlatform() == 0 or app.config.isDebugLogion then
  11. self.sigleMode = false;
  12. else
  13. self.sigleMode = true;
  14. end
  15. self.PCRememberWord = 0
  16. -- 监听用户登录成功
  17. app.user:addEventListener("onLoginSuccessed", function() self:addUser() end);
  18. app.user:addEventListener("updateWxUserInfo", handler(self,self.addUser));
  19. self:loadFile()
  20. end
  21. function UserManager:loadFile()
  22. logD("UserManager:loadFile()")
  23. -- 单用户模式下需要检查授权的有效期
  24. if self.sigleMode then
  25. logD("UserManager:loadFile() sigleUser")
  26. local jsonString = loadUserInfo(self.userInfoKey)
  27. logD("UserManager:loadFile() sigleUser jsonString = ", jsonString);
  28. if not jsonString then
  29. return
  30. end
  31. self.sigleUser = json.decode(jsonString) or {}
  32. self.initUserRememberPW = self.sigleUser.nRememberPW;
  33. local timeOld = self.sigleUser.time or 0
  34. local timeNow = os.time();
  35. logD("UserManager:loadFile() sigleUser, timeOld = ", timeOld)
  36. logD("UserManager:loadFile() sigleUser, timeNow = ", timeNow)
  37. if timeNow - timeOld > 7 * 24 * 3600 then
  38. self.sigleUser = {}
  39. self:saveFile();
  40. end
  41. else
  42. logD("UserManager:loadFile() multiUser")
  43. self.multiUser = {}
  44. jsonString = loadStringFromFile(self.fileName)
  45. if jsonString then
  46. self.multiUser = json.decode(jsonString) or {}
  47. end
  48. end
  49. end
  50. function UserManager:saveFile()
  51. logD("UserManager::saveFile()")
  52. if self.sigleMode then
  53. local jsonString = json.encode(self.sigleUser)
  54. logD("UserManager::saveFile() sigleUser jsonString = ", jsonString)
  55. saveUserInfo(self.userInfoKey, jsonString)
  56. else
  57. local jsonString = json.encode(self.multiUser)
  58. logD("UserManager::saveFile() multiUser jsonString = ", jsonString)
  59. saveStringToFile(jsonString, self.fileName)
  60. end
  61. end
  62. function UserManager:addUser(data)
  63. local response = data and data.response
  64. local forceCover = response and response.forceCover
  65. local userInfo = response and response.userInfo or app.user.userInfo;
  66. logD("UserManager::addUser() forceCover = ", forceCover)
  67. local jsonInfo = userInfo and json.decode(userInfo) or {}
  68. local userId = tonumber(jsonInfo.uid) or tonumber(app.user.loginInfo.uid);
  69. local openid = jsonInfo.openid;
  70. local unionid = jsonInfo.unionid;
  71. local loginType = jsonInfo.loginType;
  72. local phonenum = jsonInfo.phonenum;
  73. local password = jsonInfo.password;
  74. local timeNow = os.time();
  75. local nRememberPW = self:getLoginRecordCode() or self.PCRememberWord
  76. local stUserInfo = {userId = userId, openid = openid, unionid = unionid, loginType = loginType,
  77. userInfo = userInfo, time = timeNow,nRememberPW = nRememberPW,password = password}
  78. logD("UserManager::addUser() stUserInfo = ", table.tostring(stUserInfo))
  79. if self.sigleMode then
  80. local oldPassWord = self.sigleUser.userInfo and json.decode(self.sigleUser.userInfo).password
  81. if forceCover or self.sigleUser.userId ~= stUserInfo.userId or self.sigleUser.openid ~= stUserInfo.openid
  82. or oldPassWord ~= password or self.initUserRememberPW ~= nRememberPW or stUserInfo.loginType ~= self.sigleUser.loginType then
  83. logD("UserManager::addUser() sigleUser. update user info")
  84. self.sigleUser = stUserInfo;
  85. self:saveFile();
  86. else
  87. logD("UserManager::addUser() sigleUser. don't update user info ")
  88. end
  89. else
  90. self.multiUser = self.multiUser or {}
  91. self.multiUser[tostring(userId)] = stUserInfo;
  92. self:saveFile();
  93. if isWin32Platform() then
  94. app:dispatchEvent({name = "initPCAccoutList"})
  95. end
  96. end
  97. end
  98. function UserManager:clearUserList()
  99. self.sigleUser = {}
  100. self.multiUser = {}
  101. self:saveFile()
  102. end
  103. function UserManager:hasUserInfo()
  104. if self.sigleUser and self.sigleUser.userId then
  105. return true
  106. else
  107. return false
  108. end
  109. end
  110. function UserManager:getUserInfo()
  111. if self.sigleMode then
  112. return self.sigleUser
  113. else
  114. local uid = loadUserId()
  115. if uid and self.multiUser[uid] then
  116. return self.multiUser[uid]
  117. else
  118. return nil
  119. end
  120. end
  121. end
  122. function UserManager:getUserList()
  123. self:loadFile()
  124. return self.multiUser;
  125. end
  126. function UserManager:getLoginRecordCode()
  127. if self.sigleMode then
  128. return self.sigleUser.nRememberPW or 0;
  129. else
  130. local uid = loadUserId()
  131. if uid and self.multiUser[uid] then
  132. return self.multiUser[uid].nRememberPW or self.PCRememberWord;
  133. else
  134. return self.PCRememberWord;
  135. end
  136. end
  137. end
  138. function UserManager:setLoginRecordCode(newCode)
  139. if self.sigleMode then
  140. self.sigleUser.nRememberPW = newCode
  141. else
  142. local uid = loadUserId()
  143. if uid and self.multiUser[uid] then
  144. self.multiUser[uid].nRememberPW = newCode
  145. end
  146. self.PCRememberWord = newCode
  147. end
  148. end
  149. return UserManager