LoginMgr.lua 33 KB

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