LoginMgr.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. /**
  2. * 登录数据管理
  3. */
  4. let LoginMgr = {
  5. //* ************* 初始化 ************* *//
  6. /**
  7. * 初始化
  8. *
  9. */
  10. init () {
  11. if (CC_EDITOR) {
  12. return;
  13. }
  14. // 注册消息
  15. G.PublicMgr.on(JMC.PUBLIC_MSG.SWITCH_ACCOUNT, JMC.PUBLIC_MSG_ORDER.LOGIN, this.handleDidSwitchAccount, this);
  16. G.PublicMgr.on(JMC.PUBLIC_MSG.LOGIN_SUCCESS, JMC.PUBLIC_MSG_ORDER.LOGIN, this.handleDidLoginSuccess, this);
  17. G.PublicMgr.on(JMC.PUBLIC_MSG.DISCONNECTED, JMC.PUBLIC_MSG_ORDER.LOGIN, this.handleDidDisconnected, this);
  18. this._initEventListener();
  19. this._initPublishListener();
  20. cc.game.on('e_mgr_load_config_done', this.initLocalConfig, this);
  21. cc.game.on('e_middle_auth_logout_result', this._handleAuthLogoutResult, this);
  22. },
  23. /**
  24. * 初始化事件侦听
  25. *
  26. */
  27. _initEventListener () {
  28. cc.game.on('e_socket_on_connected', this._handleSocketOnConected, this);
  29. cc.game.on('e_socket_on_closed', this._handleSocketOnClosed, this);
  30. cc.game.on('e_mgr_conf_download_result', this.handleConfDownloadResult, this);
  31. },
  32. /**
  33. * 初始化服务器请求事件侦听
  34. *
  35. */
  36. _initPublishListener () {
  37. },
  38. /**
  39. * 初始化本地配置
  40. *
  41. */
  42. initLocalConfig () {
  43. },
  44. /**
  45. * 离线
  46. *
  47. */
  48. offline () {
  49. // 容错:避免前面没有关闭socket,这里再关闭一次
  50. // closeSocket有非空判断,正常情况下不会有任何效果
  51. G.NetworkMgr.closeSocket();
  52. // 向各个Mgr发送断线消息
  53. G.PublicMgr.emit(JMC.PUBLIC_MSG.DISCONNECTED);
  54. },
  55. /**
  56. * 收到登录成功事件
  57. *
  58. */
  59. handleDidLoginSuccess () {
  60. // 标记在线状态
  61. this.isOnline = true;
  62. // 重连计数重置
  63. this.reconnectTimes = 0;
  64. // h5user_self_info on_h5user_system_info都收到
  65. cc.game.emit('e_socket_on_logined');
  66. },
  67. /**
  68. * 收到断网事件
  69. *
  70. */
  71. handleDidDisconnected () {
  72. this.isOnline = false;
  73. },
  74. /**
  75. * 收到切换账号事件
  76. *
  77. */
  78. handleDidSwitchAccount () {
  79. },
  80. /**
  81. * 中间层注销账号
  82. *
  83. */
  84. _handleAuthLogoutResult (eventData) {
  85. // eventData.data // 授权信息
  86. // 关闭websocket链接
  87. this.offline();
  88. cc.director.loadScene('scene_login');
  89. },
  90. //* ************* 客户端请求/响应 ************* *//
  91. /**
  92. * 请求注册
  93. *
  94. */
  95. // #注册
  96. // usr_register 1001 {
  97. // request {
  98. // version 1: string # 版本号
  99. // uuid 2: string # UUID
  100. // device 3: string # 设备名称
  101. // sysVer 4: string # 设备信息
  102. // channel 5: integer # 渠道号
  103. // apn 6: string # 玩家网络状态
  104. // operator 7: string # 运营商类型字段
  105. // platform 8: string # 登录平台
  106. // udid 9: string # UDID
  107. // appVerison 10: string # 对内版本号
  108. // deviceId 11: string # 设备号
  109. // }
  110. // response {
  111. // code 0: integer
  112. // sysTime 1: integer # 服务器时间
  113. // ip 2: string # Socket连接的IP
  114. // port 3: integer # Socket连接的Port
  115. // token 4: string # token
  116. // uid 5: integer #
  117. // password 6: string # 密码
  118. // http 7: integer # HTTP PORT
  119. // registerTime 8: integer # 注册时间
  120. // errorMsg 9: string # 登陆失败错误信息
  121. // isGuest 10: boolean # 是否游客
  122. // wsPort 11: integer # websocket连接端口
  123. // uuid 12: string # UUID
  124. // configVersion 13: string # configVersion
  125. // }
  126. // }
  127. requestRegister (authInfo) {
  128. let info = {
  129. version: G.MiddleMgr.getVersion(),
  130. uuid: (authInfo.isGuest) ? undefined : G.MiddleMgr.getUUID(),
  131. device: G.MiddleDevice.getDeviceName() + G.FuncUtils.randomInt(100000, 999999),
  132. sysVer: G.MiddleDevice.getDeviceInfo(),
  133. channel: G.MiddleDevice.getChannelId(),
  134. apn: G.MiddleDevice.getApnType(),
  135. operator: G.MiddleDevice.getOperator(),
  136. platform: cc.sys.platform,
  137. udid: G.MiddleMgr.getUDID(),
  138. appVerison: G.APP_VERSION,
  139. deviceId: G.MiddleMgr.getIDFAEncode(),
  140. };
  141. G.NetworkMgr.sendHttpRequestToLoginServer('usr_register', info, this._responseLogin.bind(this));
  142. },
  143. /**
  144. * 请求登录
  145. *
  146. * @param {string} uid 用户ID
  147. * @param {string} password 用户密码
  148. */
  149. // #登录
  150. // usr_login 1000 {
  151. // request {
  152. // uid 0: integer
  153. // version 1: string # 版本号
  154. // password 2: string # 密码
  155. // channel 3: integer # 渠道号
  156. // apn 4: string # 玩家网络状态
  157. // operator 5: string # 运营商类型字段
  158. // platform 6: string # 登录平台
  159. // appVerison 7: string # 对内版本号
  160. // uuid 8: string # UUID
  161. // udid 9: string # UDID
  162. // sysVer 10: string # 设备信息
  163. // }
  164. // response {
  165. // code 0: integer
  166. // sysTime 1: integer # 服务器时间
  167. // ip 2: string # Socket连接的IP
  168. // port 3: integer # Socket连接的Port
  169. // token 4: string # token
  170. // http 5: integer # HTTP PORT
  171. // registerTime 6: integer # 注册时间
  172. // errorMsg 7: string # 登陆失败错误信息
  173. // isGuest 8: boolean # 是否游客
  174. // wsPort 9: integer # websocket连接端口
  175. // uuid 10: string # UUID
  176. // configVersion 11: string # configVersion
  177. // }
  178. // }
  179. requestLogin (uid, password, isGuest) {
  180. let info = {
  181. uid: uid,
  182. version: G.MiddleMgr.getVersion(),
  183. password: password,
  184. channel: G.MiddleDevice.getChannelId(),
  185. apn: G.MiddleDevice.getApnType(),
  186. operator: G.MiddleDevice.getOperator(),
  187. platform: cc.sys.platform,
  188. appVerison: G.APP_VERSION,
  189. udid: G.MiddleMgr.getUDID(),
  190. uuid: (isGuest) ? undefined : G.MiddleMgr.getUUID(),
  191. sysVer: G.MiddleDevice.getDeviceInfo(),
  192. };
  193. G.NetworkMgr.sendHttpRequestToLoginServer('usr_login', info, this._responseLogin.bind(this));
  194. },
  195. /**
  196. * 注册和登录的回调
  197. * 登录和注册返回的数据唯一不同是
  198. * 注册多了uid 和 password
  199. *
  200. * @author libo
  201. * @date 2019-06-19
  202. * @param {object} data
  203. */
  204. _responseLogin (data) {
  205. let requestInfo = data.requestInfo;
  206. let responseInfo = data.responseInfo;
  207. switch (responseInfo.code) {
  208. case 200: // 成功
  209. case 2010: // 已经注册了的用户
  210. {
  211. if (responseInfo.sysTime && responseInfo.sysTime > 0) {
  212. G.TimeUtils.synTime(responseInfo.sysTime);
  213. }
  214. // 记录登录成功时间
  215. this.loginTimestamp = G.TimeUtils.getCurrentTime();
  216. // 特殊处理uid和password
  217. let uid = (responseInfo.uid) ? responseInfo.uid : requestInfo.uid;
  218. let password = (responseInfo.password) ? responseInfo.password : requestInfo.password;
  219. // 设置uid
  220. uid = parseInt(uid);
  221. G.UserMgr.setUid(uid);
  222. this.loginData = responseInfo;
  223. this.loginData.uid = uid;
  224. this.loginData.password = password;
  225. this._connectGameServer(responseInfo.ip, responseInfo.wsPort || responseInfo.http);
  226. break;
  227. }
  228. case 2004: // 密码错误
  229. {
  230. break;
  231. }
  232. case 2009: // 账号被封杀
  233. {
  234. break;
  235. }
  236. default: // 参数错误 或 未知错误
  237. {
  238. // 连接错误或者连接错误会返回 400
  239. break;
  240. }
  241. }
  242. // 将消息下发到ctrl中处理
  243. cc.game.emit('e_nwk_usr_login', data);
  244. },
  245. }
  246. module.exports = LoginMgr;