LoginMgr.lua 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893
  1. local LoginMgr = class('LoginMgr')
  2. local LoginStatus = {
  3. Error = 0,
  4. Clear = 1,
  5. OpenLoading = 2,
  6. OpenLoaded = 3,
  7. SdkInit = 4,
  8. SdkLogin = 5,
  9. CheckSpecialInfo = 6,
  10. CheckServer = 7,
  11. WaitClickEnter = 8,
  12. UpdateCheck = 9,
  13. CanEnterServerCheck = 10,
  14. ConnectGate = 11,
  15. GameLogin = 12,
  16. EnterGame = 13,
  17. InternalRelogin = 20,
  18. }
  19. local UseLoacdServerIDState =
  20. {
  21. None = -1, --沒有用
  22. Error = 0, --用了錯誤的ID
  23. Used = 1, -- 用了
  24. Success = 2,
  25. }
  26. function LoginMgr:ctor()
  27. self:RegisterNetEvents()
  28. self.UseLoacdServerIDState = UseLoacdServerIDState.None
  29. end
  30. function LoginMgr:Clear()
  31. self:Exit()
  32. end
  33. function LoginMgr:Destroy()
  34. self:Clear()
  35. self:UnRegisterNetEvents()
  36. end
  37. function LoginMgr:RegisterNetEvents()
  38. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_LOGIN_ACK, self.OnLoginAck, self)
  39. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_LOGOUT_NTF, self.OnLogoutNtf,self)
  40. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_KICK_OUT_NTF, self.OnKickoutNtf,self)
  41. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_RECONNECT_ACK, self.OnReconnectAck,self)
  42. end
  43. function LoginMgr:UnRegisterNetEvents()
  44. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_LOGIN_ACK)
  45. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_LOGOUT_NTF)
  46. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_KICK_OUT_NTF)
  47. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_RECONNECT_ACK)
  48. end
  49. function LoginMgr:OnLoginAck(data)
  50. self.logined = true
  51. if data.unisdk_login_json ~= nil then
  52. local sdkdata
  53. local ok, errors = RO_XPCALL(function() sdkdata = JSON:decode(data.unisdk_login_json) end, debug.traceback)
  54. if ok and sdkdata~=nil and sdkdata.guid ~= nil then
  55. ManagerContainer.LuaGameMgr.openId = sdkdata.guid
  56. LogError("sdkdata.guid = "..sdkdata.guid)
  57. local gameRoleInfo = SDKMgr.Instance:GetGameRoleInfo()
  58. if gameRoleInfo then
  59. gameRoleInfo.openId = sdkdata.guid
  60. end
  61. end
  62. end
  63. self.loginErrorCode = data and data.error or nil
  64. if self.loginStatus == LoginStatus.GameLogin then
  65. self:StartEnterGame()
  66. end
  67. end
  68. function LoginMgr:OnLogoutNtf()
  69. ManagerContainer.LuaBattleMgr:StopSyncServerTimeTimer()
  70. ManagerContainer.NetManager:ResetNetMgr()
  71. ManagerContainer.LuaUIMgr:ShowNetWaiting()
  72. local data = {"LoginTips8", nil, nil, self, self.ReLogin, self.QuitGame}
  73. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISystemNoticeTips, data, nil, nil, nil, Enum.UISibling[Enum.UIType.Top + 1] + 10)
  74. end
  75. function LoginMgr:OnKickoutNtf(msgData)
  76. local noticeKey = 'LoginTips8'
  77. local noticeContent = nil
  78. if msgData then
  79. local remainTime = msgData.ban_end_time
  80. if remainTime and remainTime > 0 then
  81. remainTime = type(remainTime) == "number" and remainTime or #remainTime
  82. noticeContent = {DateTimeUtil.convertSeconds2TimeStr1(remainTime, true, true, true)}
  83. end
  84. if msgData.error == Enum.NetErrorCode.ERROR_RELOGIN then
  85. noticeKey = 'LoginTips6'
  86. elseif msgData.error == Enum.NetErrorCode.ERROR_ROLE_BANED then
  87. if noticeContent then
  88. noticeKey = 'LoginTips10'
  89. end
  90. elseif msgData.error == Enum.NetErrorCode.ERROR_SERVER_KICK_CHEAT then
  91. if noticeContent then
  92. noticeKey = 'LoginTips10'
  93. end
  94. elseif msgData.error == Enum.NetErrorCode.ERROR_SERVER_MAINAIN then
  95. noticeKey = 'LoginTips7'
  96. elseif msgData.error == Enum.NetErrorCode.ERROR_ROLE_BANED_TYPE_PERSONALCHAT then
  97. noticeKey = 'LoginTips11'
  98. end
  99. end
  100. ManagerContainer.LuaBattleMgr:StopSyncServerTimeTimer()
  101. ManagerContainer.NetManager:ResetNetMgr()
  102. ManagerContainer.LuaUIMgr:ShowNetWaiting()
  103. local data = {noticeKey, noticeContent, nil, self, self.ReLogin, self.QuitGame}
  104. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISystemNoticeTips, data, nil, nil, nil, Enum.UISibling[Enum.UIType.Top + 1] + 10)
  105. end
  106. function LoginMgr:OnReconnectAck(msgData)
  107. if msgData then
  108. if msgData.error == Enum.NetErrorCode.ERROR_OK then
  109. ManagerContainer.LuaBattleMgr:SetReconnected(true)
  110. ManagerContainer.LuaBattleMgr:SendGetServerTimeReq()
  111. if ManagerContainer.FSMMgr:IsFightingState() then
  112. local battleMode = LuaBattleBridge.CurrentBattleMode()
  113. local battleSubMode = LuaBattleBridge.CurrentBattleSubMode()
  114. if battleMode == BattleMode.Versus
  115. or battleMode == BattleMode.Boss
  116. or battleMode == BattleMode.Time then
  117. local cmdId = nil
  118. if battleSubMode == BattleSubMode.Guild then
  119. cmdId = ProtoMsgId.CS_GUILD_BOSS_CHALLENGE_REQ
  120. elseif battleSubMode == BattleSubMode.ClimbingTower then
  121. cmdId = ProtoMsgId.CS_CLIMBING_TOWER_END_REQ
  122. elseif battleSubMode == BattleSubMode.Arena then
  123. cmdId = ProtoMsgId.CS_ARENA_RESULT_REQ
  124. elseif battleSubMode == BattleSubMode.HundredDojo then
  125. cmdId = ProtoMsgId.CS_DAO_CHANG100_CHALLENGE_RESULT_REQ
  126. end
  127. if not cmdId or not ManagerContainer.NetManager:HasCmdIdAtConfirmQueue(cmdId) then
  128. ManagerContainer.LuaGameMgr:EnterBattle(false)
  129. end
  130. end
  131. end
  132. elseif msgData.error == Enum.NetErrorCode.ERROR_ROLE_INVALID then
  133. self:ReconnectRefuse(true)
  134. else
  135. self:ReconnectRefuse()
  136. end
  137. else
  138. self:ReconnectRefuse()
  139. end
  140. end
  141. function LoginMgr:ReconnectRefuse(logout)
  142. ManagerContainer.LuaBattleMgr:StopSyncServerTimeTimer()
  143. ManagerContainer.NetManager:ResetNetMgr()
  144. ManagerContainer.LuaUIMgr:ShowNetWaiting()
  145. local data = {logout and "LoginTips12" or 'LoginTips13', nil, logout, self, self.ReLogin, self.QuitGame}
  146. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISystemNoticeTips, data, nil, nil, nil, Enum.UISibling[Enum.UIType.Top + 1] + 10)
  147. end
  148. function LoginMgr:ReconnectFail()
  149. ManagerContainer.LuaUIMgr:ShowNetWaiting()
  150. local data = {"LoginTips1", nil, nil, self, self.TryReconnect, self.QuitGame}
  151. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISystemNoticeTips, data, nil, nil, nil, Enum.UISibling[Enum.UIType.Top + 1] + 10)
  152. end
  153. function LoginMgr:TryReconnect()
  154. ManagerContainer.NetManager:StartReconnect()
  155. end
  156. ----------------------------- 以下是第一次登录或重新登录的流程 -----------------------------
  157. function LoginMgr:Enter(relogin)
  158. self:Exit()
  159. self.relogin = relogin
  160. self.preLoginStatus = nil
  161. self.loginStatus = LoginStatus.Clear
  162. self.logined = nil
  163. self.loginErrorCode = nil
  164. self.waitClicked = nil
  165. self.checkServerAgain = nil
  166. local leBianSDK = nil --Wenting.Lebian.LeBianSDK.instance
  167. if leBianSDK then
  168. local clientChId = leBianSDK:GetClientChId()
  169. if not clientChId then
  170. clientChId = ''
  171. end
  172. ManagerContainer.LuaGameMgr.channelName = clientChId
  173. end
  174. self.agreement = nil
  175. self.showNotify = true
  176. end
  177. function LoginMgr:Exit()
  178. self.relogin = nil
  179. self.stayTime = nil
  180. self.preLoginStatus = nil
  181. self.loginStatus = nil
  182. if self.checkWWW then
  183. self.checkWWW:Dispose()
  184. end
  185. self.checkWWW = nil
  186. self.logined = nil
  187. self.loginErrorCode = nil
  188. self.waitClicked = nil
  189. self.checkServerAgain = nil
  190. self.serverPorts = nil
  191. if self.endUpdateCheckCB then
  192. local leBianSDK = nil--Wenting.Lebian.LeBianSDK.instance
  193. if leBianSDK then
  194. leBianSDK.queryUpdateCallback = leBianSDK.queryUpdateCallback - self.endUpdateCheckCB
  195. self.endUpdateCheckCB = nil
  196. end
  197. end
  198. self.showNotify = nil
  199. end
  200. function LoginMgr:Update()
  201. if self.loginStatus == LoginStatus.Error then
  202. return
  203. end
  204. if self.loginStatus == LoginStatus.Clear then
  205. ManagerContainer:Reset()
  206. self:StartStartLoading()
  207. elseif ManagerContainer.LuaGameMgr.NetStatus == eNetType.NetType_None then
  208. self:NetWorkError()
  209. return
  210. elseif self.loginStatus == LoginStatus.OpenLoading then
  211. if ManagerContainer.LuaGameMgr.loadingPageOk then
  212. self:StartStartLoaded()
  213. end
  214. elseif self.loginStatus == LoginStatus.OpenLoaded then
  215. self.stayTime = self.stayTime - Time.deltaTime
  216. if self.stayTime <= 0 then
  217. self:StartSdkInit()
  218. end
  219. elseif self.loginStatus == LoginStatus.SdkInit then
  220. if ManagerContainer.LuaGameMgr.sdkInited == Enum.ParamState.Success then
  221. self:StartSdkLogin()
  222. elseif ManagerContainer.LuaGameMgr.sdkInited == Enum.ParamState.Fail then
  223. self:SdkInitFail()
  224. else
  225. self.stayTime = self.stayTime - Time.deltaTime
  226. if self.stayTime <= 0 then
  227. self:SdkInitFail()
  228. end
  229. end
  230. elseif self.loginStatus == LoginStatus.SdkLogin then
  231. if ManagerContainer.LuaGameMgr.sdkLogined == Enum.ParamState.Success then
  232. self:StartCheckSpecialInfo()
  233. elseif ManagerContainer.LuaGameMgr.sdkLogined == Enum.ParamState.Fail then
  234. self:SdkLoginFail()
  235. else
  236. if self.stayTime > 0 then
  237. self.stayTime = self.stayTime - Time.deltaTime
  238. if self.stayTime < 0 then
  239. self.waitClicked = nil
  240. end
  241. else
  242. if self.waitClicked then
  243. self:InternalRelogin()
  244. end
  245. end
  246. end
  247. elseif self.loginStatus == LoginStatus.CheckSpecialInfo then
  248. if self.checkWWW then
  249. if self.checkWWW.isDone then
  250. self:CheckSpecialInfoSuccess()
  251. else
  252. self.stayTime = self.stayTime - Time.deltaTime
  253. if self.stayTime <= 0 then
  254. self:CheckSpecialInfoFail()
  255. end
  256. end
  257. else
  258. self:CheckSpecialInfoFail()
  259. end
  260. elseif self.loginStatus == LoginStatus.CheckServer then
  261. if self.checkWWW then
  262. if self.checkWWW.isDone then
  263. self:CheckServerSuccess()
  264. else
  265. self.stayTime = self.stayTime - Time.deltaTime
  266. if self.stayTime <= 0 then
  267. self:CheckServerFail()
  268. end
  269. end
  270. else
  271. self:CheckServerFail()
  272. end
  273. elseif self.loginStatus == LoginStatus.WaitClickEnter then
  274. if self.waitClicked then
  275. self:EndWaitClickEnter()
  276. end
  277. elseif self.loginStatus == LoginStatus.UpdateCheck then
  278. elseif self.loginStatus == LoginStatus.CanEnterServerCheck then
  279. if ManagerContainer.LuaGameMgr.canEnterServerState == Enum.ParamState.Success then
  280. self:CheckCanEnterServerStateSuccess()
  281. elseif ManagerContainer.LuaGameMgr.canEnterServerState == Enum.ParamState.Fail then
  282. self:CheckCanEnterServerStateFail()
  283. end
  284. elseif self.loginStatus == LoginStatus.ConnectGate then
  285. if ManagerContainer.NetManager.connectGated == Enum.ParamState.Success then
  286. self:StartLoginGame()
  287. elseif ManagerContainer.NetManager.connectGated == Enum.ParamState.Fail then
  288. self:ReConnectGate()
  289. end
  290. elseif self.loginStatus == LoginStatus.GameLogin then
  291. if self.logined then
  292. self:StartEnterGame()
  293. else
  294. self.stayTime = self.stayTime - Time.deltaTime
  295. if self.stayTime <= 0 then
  296. self:LoginGameFail()
  297. end
  298. end
  299. elseif self.loginStatus == LoginStatus.InternalRelogin then
  300. self:StartStartLoading()
  301. end
  302. end
  303. function LoginMgr:GetTask()
  304. return nil
  305. end
  306. function LoginMgr:StartStartLoading()
  307. if ManagerContainer.LuaUIMgr:HasOpenPage(Enum.UIPageName.UILanuch) then
  308. self:StartStartLoaded()
  309. else
  310. self.preLoginStatus = self.loginStatus
  311. self.loginStatus = LoginStatus.OpenLoading
  312. ManagerContainer.LuaGameMgr:OpenLoading(Enum.UIPageName.UILanuch)
  313. end
  314. end
  315. function LoginMgr:StartStartLoaded()
  316. self.preLoginStatus = self.loginStatus
  317. self.loginStatus = LoginStatus.OpenLoaded
  318. self.stayTime = 0.5
  319. if self.relogin then
  320. ManagerContainer.LuaGameMgr:ReLoginClearData()
  321. end
  322. ManagerContainer.LuaUIMgr:CloseAllPagesExceptId(Enum.UIPageName.UILanuch)
  323. end
  324. function LoginMgr:StartSdkInit()
  325. if ManagerContainer.LuaGameMgr.sdkInited == Enum.ParamState.Success then
  326. self:StartSdkLogin()
  327. else
  328. SDKMgr.Instance:SetHttpCheckUrl(PlatformPack.URL_KEY)
  329. self.preLoginStatus = self.loginStatus
  330. self.loginStatus = LoginStatus.SdkInit
  331. self.stayTime = 35
  332. ManagerContainer.LuaGameMgr.isCallInit = true
  333. --LogError("===============sdk init=========".."isCallInit = "..Inspect(ManagerContainer.LuaGameMgr.isCallInit))
  334. ManagerContainer.LuaGameMgr.sdkInited = Enum.ParamState.None
  335. ManagerContainer.LuaGameMgr:SdkInit()
  336. end
  337. end
  338. function LoginMgr:SdkInitFail()
  339. self.preLoginStatus = self.loginStatus
  340. self.loginStatus = LoginStatus.Error
  341. local data = {"LoginTips2", nil, nil, self, self.InternalRelogin, self.QuitGame}
  342. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISystemNoticeTips, data, nil, nil, nil, Enum.UISibling[Enum.UIType.Top + 1] + 10)
  343. end
  344. function LoginMgr:StartSdkLogin()
  345. if ManagerContainer.LuaGameMgr.sdkLogined == Enum.ParamState.Success then
  346. self:StartCheckSpecialInfo()
  347. else
  348. self.preLoginStatus = self.loginStatus
  349. self.loginStatus = LoginStatus.SdkLogin
  350. self.stayTime = 5
  351. ManagerContainer.LuaGameMgr.sdkLogined = Enum.ParamState.None
  352. ManagerContainer.LuaGameMgr:SdkLogin()
  353. end
  354. end
  355. function LoginMgr:SdkLoginFail()
  356. self.preLoginStatus = self.loginStatus
  357. self.loginStatus = LoginStatus.Error
  358. local data = {"LoginTips3", nil, nil, self, self.InternalRelogin, self.QuitGame}
  359. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISystemNoticeTips, data, nil, nil, nil, Enum.UISibling[Enum.UIType.Top + 1] + 10)
  360. end
  361. function LoginMgr:StartCheckSpecialInfo()
  362. ManagerContainer.LuaUIMgr:ShowNetWaiting()
  363. self.preLoginStatus = self.loginStatus
  364. self.loginStatus = LoginStatus.CheckSpecialInfo
  365. self.stayTime = 5
  366. if self.checkWWW then
  367. self.checkWWW:Dispose()
  368. end
  369. local url = PlatformPack.SPECIAL_INFO_URL-- .. '?timesamp=' .. tostring(os.time())
  370. -- local platform = ManagerContainer.LuaGameMgr.platform
  371. -- if platform and platform ~= '' then
  372. -- url = url .. '&platform=' .. tostring(platform)
  373. -- end
  374. -- local subplatform = ManagerContainer.LuaGameMgr.channelName
  375. -- if subplatform and subplatform ~= '' then
  376. -- url = url .. '&sub_platform=' .. tostring(subplatform)
  377. -- end
  378. --LogError(url)
  379. --self.agreement = "我已详细阅读并同意<link=https://www.i7game.com/mobile/user/protocol.html>《用户协议》</link>和<link=https://www.i7game.com/mobile/user/privacy.html>《隐私政策》</link>"--
  380. self.checkWWW = UnityEngine.WWW(url)
  381. end
  382. function LoginMgr:CheckSpecialInfoSuccess()
  383. if not self.checkWWW then
  384. self:CheckSpecialInfoFail()
  385. return
  386. end
  387. if self.checkWWW.error and self.checkWWW.error ~= '' then
  388. self:CheckSpecialInfoFail()
  389. return
  390. end
  391. local ok, result = RO_XPCALL(JSON.decode, debug.traceback, JSON, self.checkWWW.text)
  392. if ok then
  393. self.agreement = result.agreement
  394. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.CURRENT_SPECIAL_INFO_CHANGED)
  395. self:StartCheckServer()
  396. else
  397. LogError("[wboy] CheckSpecialInfoFail " .. tostring(self.checkWWW.text))
  398. self:CheckSpecialInfoFail()
  399. end
  400. end
  401. function LoginMgr:CheckSpecialInfoFail()
  402. if self.checkWWW then
  403. self.checkWWW:Dispose()
  404. end
  405. self.checkWWW = nil
  406. self:StartCheckServer()
  407. end
  408. function generateDeviceId()
  409. local seed = tostring({}):sub(7)
  410. math.randomseed(seed)
  411. math.random(); math.random(); math.random()
  412. local hexChars = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}
  413. local deviceId = ""
  414. for i=1,8 do
  415. deviceId = deviceId .. hexChars[math.random(16)]
  416. end
  417. for i=1,4 do
  418. deviceId = deviceId .. "-" .. hexChars[math.random(16)] .. hexChars[math.random(16)] .. hexChars[math.random(16)] .. hexChars[math.random(16)]
  419. end
  420. return deviceId
  421. end
  422. function LoginMgr:StartCheckServer(isAgain)
  423. ManagerContainer.LuaBattleMgr:ResetBattleMode()
  424. self.checkServerAgain = isAgain
  425. local openId = ManagerContainer.LuaGameMgr.openId --"8bb8f18b-aeef-1b79-db12-a825"--generateDeviceId()--
  426. LogError("OpenID = "..openId);
  427. if not openId or openId == '' then
  428. openId = UnityEngine.PlayerPrefs.GetString("LoginName")
  429. end
  430. if not openId or openId == '' then
  431. openId = ManagerContainer.LuaGameMgr.DeviceId
  432. end
  433. ManagerContainer.LuaGameMgr.openId = openId
  434. if Constant.SERVER_FORCE_INFO then
  435. self:SetServerInfo(Constant.SERVER_FORCE_INFO)
  436. if isAgain then
  437. self:StartCheckCanEnterServerState()
  438. else
  439. self:StartWaitClickEnter()
  440. end
  441. return
  442. end
  443. ManagerContainer.LuaUIMgr:ShowNetWaiting()
  444. self.stayTime = 5
  445. local serverId = ManagerContainer.LuaGameMgr.serverData.id
  446. --LogWarning('serverId-----'..serverId)
  447. if(serverId == nil and self.UseLoacdServerIDState ~= UseLoacdServerIDState.Error)then
  448. serverId = ManagerContainer.LuaGameMgr:GetServerID()
  449. --serverId = 3;
  450. --LogWarning('serverId-----'..serverId)
  451. self.UseLoacdServerIDState = UseLoacdServerIDState.Used;
  452. end
  453. local url = PlatformPack.SERVERLIST_URL
  454. if serverId and serverId > 0 then
  455. url = url .. "?type=21&id=" .. tostring(serverId)
  456. else
  457. url = url .. "?"
  458. end
  459. url = ManagerContainer.LuaGameMgr:ComposeCommonServerInfo(url)
  460. if self.checkWWW then
  461. self.checkWWW:Dispose()
  462. end
  463. --LogWarning('checkWWW-----'..url)
  464. self.preLoginStatus = self.loginStatus
  465. self.loginStatus = LoginStatus.CheckServer
  466. --url = "http://103.239.245.64:81/serverlist/test"
  467. self.checkWWW = UnityEngine.WWW(url)
  468. end
  469. function LoginMgr:CheckServerFail()
  470. self.preLoginStatus = self.loginStatus
  471. self.loginStatus = LoginStatus.Error
  472. local error = self.checkWWW.error
  473. if self.checkWWW then
  474. self.checkWWW:Dispose()
  475. end
  476. self.checkWWW = nil
  477. self.checkServerAgain = nil
  478. if error == "429 Too Many Requests" then
  479. --data = {"LoginTips14", nil, nil, self, self.InternalRelogin, self.QuitGame}
  480. ManagerContainer.LuaGameMgr:ClearServerData()
  481. ManagerContainer.LuaUIMgr:CloseNetWaiting()
  482. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.CURRENT_SERVER_CHANGED)
  483. self.waitNoticeTimer = ManagerContainer.LuaTimerMgr:AddLuaTimer(500, 1,function ()
  484. local seed = tostring({}):sub(7)
  485. math.randomseed(seed)
  486. math.random(); math.random(); math.random()
  487. local waitTime = math.random(2,10)
  488. local waitData ={2,"LoginGetServerListErrorString",{waitTime,1,function ()
  489. ManagerContainer.LuaUIMgr:CloseNetWaiting()
  490. self.waitCloseNoticeTimer = ManagerContainer.LuaTimerMgr:AddLuaTimer(200, 1,function ()
  491. self:InternalRelogin()
  492. ManagerContainer.LuaTimerMgr:RemoveTimer(self.waitCloseNoticeTimer)
  493. end,nil)
  494. end}}
  495. ManagerContainer.LuaUIMgr:ShowNetWaiting_New(waitData)
  496. ManagerContainer.LuaTimerMgr:RemoveTimer(self.waitNoticeTimer)
  497. end, nil)
  498. return
  499. end
  500. --LoginTips14
  501. ManagerContainer.LuaUIMgr:CloseNetWaiting()
  502. local data = {"LoginTips4", nil, nil, self, self.InternalRelogin, self.QuitGame}
  503. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISystemNoticeTips, data, nil, nil, nil, Enum.UISibling[Enum.UIType.Top + 1] + 10)
  504. ManagerContainer.LuaGameMgr:ClearServerData()
  505. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.CURRENT_SERVER_CHANGED)
  506. end
  507. function LoginMgr:CheckServerSuccess()
  508. if not self.checkWWW then
  509. self:CheckServerFail()
  510. return
  511. end
  512. if self.checkWWW.error and self.checkWWW.error ~= '' then
  513. LogError("[wboy] CheckServer error = " .. tostring(self.checkWWW.error))
  514. LogError("[wboy] CheckServer Text = " .. tostring(self.checkWWW.text))
  515. self:CheckServerFail()
  516. return
  517. end
  518. local ok, result = RO_XPCALL(JSON.decode, debug.traceback, JSON, self.checkWWW.text)
  519. --LogError("[wboy] CheckServer " .. tostring(self.checkWWW.text))
  520. if ok then
  521. self:SetServerInfo(result)
  522. self.checkWWW:Dispose()
  523. self.checkWWW = nil
  524. if result.err and self.UseLoacdServerIDState == UseLoacdServerIDState.Used then
  525. self.UseLoacdServerIDState = UseLoacdServerIDState.Error
  526. ManagerContainer.LuaGameMgr:SetServerID(-1)
  527. elseif self.UseLoacdServerIDState == UseLoacdServerIDState.Used or self.UseLoacdServerIDState == UseLoacdServerIDState.Error then
  528. self.UseLoacdServerIDState = UseLoacdServerIDState.Success
  529. end
  530. if self.checkServerAgain then
  531. self.checkServerAgain = nil
  532. self:StartCheckCanEnterServerState()
  533. else
  534. self:StartWaitClickEnter()
  535. end
  536. else
  537. LogError("[wboy] CheckServerFail " .. tostring(self.checkWWW.text))
  538. self:CheckServerFail()
  539. end
  540. end
  541. function LoginMgr:SetServerInfo(server)
  542. ManagerContainer.LuaGameMgr:InitServerData(server.ServerId, server.ServerName, server.Ip, server.Port, server.State)
  543. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.CURRENT_SERVER_CHANGED)
  544. end
  545. function LoginMgr:StartWaitClickEnter()
  546. ManagerContainer.LuaUIMgr:CloseNetWaiting()
  547. self.preLoginStatus = self.loginStatus
  548. self.loginStatus = LoginStatus.WaitClickEnter
  549. self.waitClicked = nil
  550. local serverData = ManagerContainer.LuaGameMgr.serverData
  551. if serverData and serverData.id and serverData.id > 0 and self.showNotify then
  552. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINotifyTips)
  553. self.showNotify = false
  554. end
  555. end
  556. function LoginMgr:EndWaitClickEnter()
  557. if ManagerContainer.LuaGameMgr.sdkLogined == Enum.ParamState.Success then
  558. if self:IsAgreement() then
  559. local isOn = ManagerContainer.PlayerPrefsMgr:GetGlobalBoolean(Constant.AGREEMENT_RECORD_KEY, false)
  560. if not isOn then
  561. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('GameLogin19')
  562. self.preLoginStatus = self.loginStatus
  563. self.loginStatus = LoginStatus.WaitClickEnter
  564. self.waitClicked = nil
  565. return
  566. end
  567. end
  568. self:StartUpdateCheck()
  569. else
  570. self:InternalRelogin()
  571. end
  572. end
  573. function LoginMgr:StartUpdateCheck()
  574. self.preLoginStatus = self.loginStatus
  575. self.loginStatus = LoginStatus.UpdateCheck
  576. ManagerContainer.LuaUIMgr:ShowNetWaiting()
  577. local leBianSDK = nil --Wenting.Lebian.LeBianSDK.instance
  578. if leBianSDK then
  579. if not self.endUpdateCheckCB then
  580. self.endUpdateCheckCB = System.Action_Wenting_Lebian_QueryUpdateErrorCode(self.EndUpdateCheck, self)
  581. end
  582. leBianSDK.queryUpdateCallback = leBianSDK.queryUpdateCallback + self.endUpdateCheckCB
  583. leBianSDK:QueryUpdate()
  584. else
  585. self:EndUpdateCheck(nil)
  586. --self:EndUpdateCheck(Wenting.Lebian.QueryUpdateErrorCode.Error)
  587. end
  588. end
  589. function LoginMgr:EndUpdateCheck(resultCode)
  590. local leBianSDK = nil -- Wenting.Lebian.LeBianSDK.instance
  591. if leBianSDK then
  592. if self.endUpdateCheckCB then
  593. leBianSDK.queryUpdateCallback = leBianSDK.queryUpdateCallback - self.endUpdateCheckCB
  594. self.endUpdateCheckCB = nil
  595. end
  596. local QueryUpdateErrorCode = Wenting.Lebian.QueryUpdateErrorCode
  597. if resultCode == QueryUpdateErrorCode.NoUpdate then
  598. self:StartCheckServer(true)
  599. return
  600. elseif resultCode == QueryUpdateErrorCode.Update then
  601. self:StartCheckServer(true)
  602. return
  603. elseif resultCode == QueryUpdateErrorCode.ForceUpdate then
  604. -- 停止后续流程
  605. self.preLoginStatus = self.loginStatus
  606. self.loginStatus = LoginStatus.Error
  607. return
  608. end
  609. end
  610. -- self:ResetClickState()
  611. --self:ErrorNoticeDisplay('GameLogin20')
  612. self:StartCheckServer(true)
  613. end
  614. function LoginMgr:StartCheckCanEnterServerState()
  615. if not SDKMgr.Instance:HasCanEnterServerJudge() then
  616. self:StartConnectGate()
  617. return
  618. end
  619. self.preLoginStatus = self.loginStatus
  620. self.loginStatus = LoginStatus.CanEnterServerCheck
  621. ManagerContainer.LuaGameMgr.canEnterServerState = Enum.ParamState.None
  622. local serverData = ManagerContainer.LuaGameMgr.serverData
  623. SDKMgr.Instance:CanEnterServerJudge(serverData.id, serverData.name)
  624. end
  625. function LoginMgr:CheckCanEnterServerStateSuccess()
  626. self:StartConnectGate()
  627. end
  628. function LoginMgr:CheckCanEnterServerStateFail()
  629. self:ResetClickState()
  630. end
  631. function LoginMgr:StartConnectGate()
  632. local serverData = ManagerContainer.LuaGameMgr.serverData
  633. if serverData.state == Enum.ServerState.Maintain then
  634. self:StartMaintain()
  635. return
  636. elseif serverData.state == Enum.ServerState.Full then
  637. self:ConnectGateFail()
  638. return
  639. end
  640. ManagerContainer.LuaUIMgr:ShowNetWaiting()
  641. self.preLoginStatus = self.loginStatus
  642. self.loginStatus = LoginStatus.ConnectGate
  643. ManagerContainer.NetManager.connectGated = Enum.ParamState.None
  644. self.logined = nil
  645. self.loginErrorCode = nil
  646. local serverPorts = serverData.ports
  647. local len = serverPorts and #serverPorts or 0
  648. if len <= 0 then
  649. self:ConnectGateFail()
  650. elseif len <= 1 then
  651. serverData.portidx = 1
  652. ManagerContainer.NetManager:ConnectGate(serverData.ip, serverPorts[1])
  653. else
  654. math.randomseed(os.time())
  655. local serverPortIdx = math.random(len)
  656. serverData.portidx = serverPortIdx
  657. self.serverPorts = clone(serverData.ports)
  658. ManagerContainer.NetManager:ConnectGate(serverData.ip, serverPorts[serverPortIdx])
  659. end
  660. end
  661. function LoginMgr:ReConnectGate()
  662. ManagerContainer.NetManager.connectGated = Enum.ParamState.None
  663. self.logined = nil
  664. self.loginErrorCode = nil
  665. local serverData = ManagerContainer.LuaGameMgr.serverData
  666. if serverData.state == Enum.ServerState.Maintain then
  667. self:StartMaintain()
  668. return
  669. elseif serverData.state == Enum.ServerState.Full then
  670. self:ConnectGateFail()
  671. return
  672. end
  673. local len = self.serverPorts and #self.serverPorts or 0
  674. if len <= 0 then
  675. self:ConnectGateFail()
  676. else
  677. local serverPortIdx = serverData.portidx
  678. if serverPortIdx then
  679. table.remove(self.serverPorts, serverPortIdx)
  680. end
  681. len = #self.serverPorts
  682. if len <= 0 then
  683. self:ConnectGateFail()
  684. else
  685. serverPortIdx = math.random(len)
  686. serverData.portidx = serverPortIdx
  687. ManagerContainer.NetManager:ConnectGate(serverData.ip, self.serverPorts[serverPortIdx])
  688. end
  689. end
  690. end
  691. function LoginMgr:ConnectGateFail()
  692. self:ResetClickState()
  693. self:ErrorNoticeDisplay('GameLogin21')
  694. end
  695. function LoginMgr:StartMaintain()
  696. self:ResetClickState()
  697. self:ErrorNoticeDisplay('GameLogin11')
  698. end
  699. function LoginMgr:StartLoginGame()
  700. self.preLoginStatus = self.loginStatus
  701. self.loginStatus = LoginStatus.GameLogin
  702. self.stayTime = 10
  703. end
  704. function LoginMgr:LoginGameFail(error,...)
  705. self:ResetClickState()
  706. if not error then
  707. error = 'GameLogin14'
  708. end
  709. self:ErrorNoticeDisplay(error, ...)
  710. end
  711. function LoginMgr:StartEnterGame()
  712. local loginErrorCode = self.loginErrorCode
  713. if loginErrorCode == Enum.NetErrorCode.ERROR_OK then
  714. self.preLoginStatus = self.loginStatus
  715. self.loginStatus = LoginStatus.EnterGame
  716. ManagerContainer.LuaUIMgr:CloseAllPagesExceptId(Enum.UIPageName.UILanuch)
  717. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Loading_Begin)
  718. elseif loginErrorCode == Enum.NetErrorCode.ERROR_ROLE_NOT_FOUND then
  719. self.preLoginStatus = self.loginStatus
  720. self.loginStatus = LoginStatus.EnterGame
  721. ManagerContainer.LuaGameMgr:EnterCreateRole(false)
  722. elseif loginErrorCode == Enum.NetErrorCode.ERROR_ROLE_NOT_FOUND_NEED_ACTIVE_CODE then
  723. self.preLoginStatus = self.loginStatus
  724. self.loginStatus = LoginStatus.EnterGame
  725. ManagerContainer.LuaGameMgr:EnterCreateRole(true)
  726. elseif loginErrorCode == Enum.NetErrorCode.ERROR_SDK_ACCOUNT_INVALID then
  727. self.preLoginStatus = self.loginStatus
  728. self.loginStatus = LoginStatus.Error
  729. ManagerContainer.NetManager:ResetNetMgr()
  730. ManagerContainer.LuaUIMgr:CloseNetWaiting()
  731. local data = {"LoginTips9", nil, true, self, self.ReLogin, self.QuitGame}
  732. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISystemNoticeTips, data, nil, nil, nil, Enum.UISibling[Enum.UIType.Top + 1] + 10)
  733. elseif loginErrorCode == Enum.NetErrorCode.ERROR_GAME_VERSION then
  734. self.preLoginStatus = self.loginStatus
  735. self.loginStatus = LoginStatus.Error
  736. ManagerContainer.NetManager:ResetNetMgr()
  737. ManagerContainer.LuaUIMgr:CloseNetWaiting()
  738. local data = {"LoginTips5", nil, nil, self, self.InternalRelogin, self.QuitGame}
  739. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISystemNoticeTips, data, nil, nil, nil, Enum.UISibling[Enum.UIType.Top + 1] + 10)
  740. elseif loginErrorCode == Enum.NetErrorCode.ERROR_ROLE_BANED then
  741. self:GameBanedError()
  742. elseif loginErrorCode == Enum.NetErrorCode.ERROR_ROLE_BANED_TYPE_PERSONALCHAT then
  743. self:GameBanedError()
  744. else
  745. local langStr = string.formatbykey(loginErrorCode)
  746. if not langStr or langStr == '' then
  747. self:LoginGameFail(loginErrorCode)
  748. else
  749. self:ResetClickState()
  750. end
  751. end
  752. end
  753. function LoginMgr:GameBanedError()
  754. self.preLoginStatus = self.loginStatus
  755. self.loginStatus = LoginStatus.Error
  756. end
  757. function LoginMgr:ResetClickState()
  758. self.preLoginStatus = self.loginStatus
  759. self.loginStatus = LoginStatus.Error
  760. ManagerContainer.NetManager:ResetNetMgr()
  761. ManagerContainer.LuaUIMgr:CloseNetWaiting()
  762. self:StartWaitClickEnter()
  763. end
  764. function LoginMgr:IsLoginWaiting()
  765. return (not self.loginStatus or self.loginStatus == LoginStatus.WaitClickEnter)
  766. end
  767. function LoginMgr:NetWorkError()
  768. self.preLoginStatus = self.loginStatus
  769. self.loginStatus = LoginStatus.Error
  770. ManagerContainer.NetManager:ResetNetMgr()
  771. ManagerContainer.LuaUIMgr:CloseNetWaiting()
  772. local data = {"LoginTips1", nil, nil, self, self.InternalRelogin, self.QuitGame}
  773. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISystemNoticeTips, data, nil, nil, nil, Enum.UISibling[Enum.UIType.Top + 1] + 10)
  774. end
  775. function LoginMgr:ErrorNoticeDisplay(error, ...)
  776. if not ManagerContainer.LuaUIMgr:GetPage(Enum.UIPageName.UIErrorTips) then
  777. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIErrorTips, {errorId=error,params = {...}}, nil, nil, nil, Enum.UISibling[Enum.UIType.Top + 1] + 11)
  778. else
  779. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ERROR_DESC_DISPLAY, {errorId=error,params = {...}})
  780. end
  781. end
  782. function LoginMgr:InternalRelogin()
  783. self.preLoginStatus = self.loginStatus
  784. self.loginStatus = LoginStatus.InternalRelogin
  785. ManagerContainer.LuaUIMgr:ShowNetWaiting()
  786. ManagerContainer.LuaGameMgr:ClearServerData()
  787. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.CURRENT_SERVER_CHANGED)
  788. end
  789. function LoginMgr:ReLogin(logout)
  790. if logout and ManagerContainer.LuaGameMgr.sdkLogined == Enum.ParamState.Success then
  791. ManagerContainer.LuaGameMgr:SdkLogout()
  792. else
  793. ManagerContainer.LuaGameMgr:ClearServerData()
  794. ManagerContainer.LuaGameMgr:ReLogin()
  795. end
  796. end
  797. function LoginMgr:QuitGame()
  798. ManagerContainer.LuaGameMgr:QuitGame(false)
  799. return true
  800. end
  801. function LoginMgr:IsAgreement()
  802. return self.agreement and self.agreement ~= '' or false
  803. end
  804. function LoginMgr:GetAgreement()
  805. return self.agreement
  806. end
  807. return LoginMgr