LoginController.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. using ET;
  2. using UnityEngine;
  3. namespace GFGGame
  4. {
  5. public class LoginController
  6. {
  7. public static string ageTipsTitle = "适龄提示说明";
  8. public static string ageTips = "1)本游戏是一款角色扮演类游戏,适用于年满16周岁及以上的用户,建议未成年人在家长监护下使用游戏产品。\n2)本游戏基于架空的故事背景和幻想世界观,剧情简单且积极向上,没有基于真实历史和现实事件的改编内容游戏玩法以收集不同服装进行搭配展开,有较为简单的竞技和对抗玩法,游戏中有基于文字的陌生人社交系统。\n3)本游戏中有用户实名认证系统,认证为未成年人的用户将接受以下管理:游戏中部分玩法和道具需要付费。未满8周岁的用户不能付费; 8周岁以上未满16周岁的未成年人用户,单次充值金额不得超过50元人民币,每月充值金额累计不得超过200元人民币; 16周岁以上的未成年人用户,单次充值金额不得超过100元人民币,每月充值金额累计不得超过400元人民币。\n4)本游戏以服装收集及搭配为主要玩法,有助于玩家开阔眼界、进一步提升审美能力。游戏中很多服装融入了中华传统元素,可以有助于中华传统文化的传播,体验中国的古典美。";
  9. public static void ShowLogin()
  10. {
  11. LauncherView.Instance.Close();
  12. ViewManager.Show<LoginView>();
  13. }
  14. public static async ET.ETTask LoginTest(string account)
  15. {
  16. ViewManager.Show<ModalStatusView>("登录中...");
  17. int errorCode = await ET.LoginHelper.LoginTest(GameGlobal.zoneScene, GameConfig.LoginAddress, account);
  18. if (errorCode == ET.ErrorCode.ERR_Success)
  19. {
  20. GameGlobal.isVisitor = false;
  21. ViewManager.Hide<LoginInputView>();
  22. ViewManager.Hide<RegisterView>();
  23. AccountInfoComponent accountInfoComponent = GameGlobal.zoneScene.GetComponent<AccountInfoComponent>();
  24. GameGlobal.userId = accountInfoComponent.AccountId;
  25. GameGlobal.userAge = accountInfoComponent.Age;
  26. if (GameGlobal.isVisitor)
  27. {
  28. //PlayerPrefs.SetFloat(GameConst.VISITOR_ID_KEY, GameGlobal.userId);
  29. }
  30. else
  31. {
  32. PlayerPrefs.SetString(GameConst.ACCOUNT_LAST_LOGIN_KEY, account);
  33. PlayerPrefs.SetString(GameConst.PASSWORD_LAST_LOGIN_KEY, "");
  34. }
  35. GameController.CheckSpecialAccount("sygfg");
  36. LocalCache.SetBool(GameConst.LAST_LOGIN_IS_VISITOR_KEY, GameGlobal.isVisitor);
  37. PlayerPrefs.Save();
  38. await OnLoginSuccess();
  39. }
  40. else
  41. {
  42. OnLoginFail(errorCode);
  43. }
  44. }
  45. public static async ET.ETTask Login(string account, string password, bool isMD5 = false)
  46. {
  47. ViewManager.Show<ModalStatusView>("登录中...");
  48. int errorCode = await ET.LoginHelper.Login(GameGlobal.zoneScene, GameConfig.LoginAddress, account, password, isMD5);
  49. if (errorCode == ET.ErrorCode.ERR_Success)
  50. {
  51. GameGlobal.isVisitor = false;
  52. ViewManager.Hide<LoginInputView>();
  53. ViewManager.Hide<RegisterView>();
  54. AccountInfoComponent accountInfoComponent = GameGlobal.zoneScene.GetComponent<AccountInfoComponent>();
  55. GameGlobal.userId = accountInfoComponent.AccountId;
  56. GameGlobal.userAge = accountInfoComponent.Age;
  57. if (GameGlobal.isVisitor)
  58. {
  59. //PlayerPrefs.SetFloat(GameConst.VISITOR_ID_KEY, GameGlobal.userId);
  60. }
  61. else
  62. {
  63. var passwordMD5 = password;
  64. //密码禁止明文传输
  65. if (!isMD5)
  66. {
  67. passwordMD5 = MD5Helper.stringMD5(password);
  68. }
  69. PlayerPrefs.SetString(GameConst.ACCOUNT_LAST_LOGIN_KEY, account);
  70. PlayerPrefs.SetString(GameConst.PASSWORD_LAST_LOGIN_KEY, passwordMD5);
  71. }
  72. GameController.CheckSpecialAccount(account);
  73. LocalCache.SetBool(GameConst.LAST_LOGIN_IS_VISITOR_KEY, GameGlobal.isVisitor);
  74. PlayerPrefs.Save();
  75. await OnLoginSuccess();
  76. }
  77. else
  78. {
  79. OnLoginFail(errorCode);
  80. }
  81. }
  82. private static async ETTask OnLoginSuccess()
  83. {
  84. await GetServerInfos();
  85. ServerInfosComponent serverInfosComponent = GameGlobal.zoneScene.GetComponent<ServerInfosComponent>();
  86. EventAgent.DispatchEvent(ConstMessage.SERVER_CHANGE, serverInfosComponent.CurrentServerId);
  87. EventAgent.DispatchEvent(ConstMessage.LOGIN_SUCCESS);
  88. if (AntiAddictionController.CheckAntiAddictionWhenLogin())
  89. {
  90. ViewManager.Hide<ModalStatusView>();
  91. return;
  92. }
  93. await ReqNoticeInfo();
  94. ViewManager.Hide<ModalStatusView>();
  95. }
  96. private static async ETTask ReqNoticeInfo()
  97. {
  98. int result = await LoginHelper.ReqGetLatestNotice();
  99. if (result == ErrorCode.ERR_Success)
  100. {
  101. NoticeInfo noticeInfo = NoticeDataManager.Instance.LastNoticeInfo;
  102. Debug.Log("noticeTime:" + noticeInfo.time + " currentTime:" + (TimeInfo.Instance.ServerNow() / 1000));
  103. long noticeTime = TimeUtil.GetDayTimeBySec(noticeInfo.time * 1000, GlobalCfgArray.globalCfg.refreshTime);
  104. long currentTime = TimeUtil.GetDayTimeBySec(TimeInfo.Instance.ServerNow(), GlobalCfgArray.globalCfg.refreshTime);
  105. Debug.Log("noticeTime:" + noticeTime + " currentTime:" + currentTime);
  106. if ((currentTime - noticeTime) / 1000 / TimeUtil.SECOND_PER_DAY < 3)
  107. {
  108. ViewManager.Show<SystemNoticeView>(new object[] { NoticeDataManager.Instance.LastNoticeInfo.title, NoticeDataManager.Instance.LastNoticeInfo.content });
  109. }
  110. }
  111. else
  112. {
  113. ErrorCodeController.Handler(result);
  114. }
  115. return;
  116. }
  117. private static void OnLoginFail(int errorCode)
  118. {
  119. ViewManager.Hide<ModalStatusView>();
  120. if (ErrorCodeController.Handler(errorCode))
  121. {
  122. GameController.QuitToLoginView(true);
  123. }
  124. EventAgent.DispatchEvent(ConstMessage.LOGIN_FAIL);
  125. }
  126. public static void Logout()
  127. {
  128. GameGlobal.zoneScene.GetComponent<SessionComponent>().AccountSession?.Dispose();
  129. GameGlobal.zoneScene.GetComponent<SessionComponent>().GateSession?.Dispose();
  130. }
  131. public static async ETTask Register(string account, string password, string name, string identityNum, string code)
  132. {
  133. ViewManager.Show<ModalStatusView>("注册中...");
  134. int errorCode = await LoginHelper.Register(GameGlobal.zoneScene, GameConfig.LoginAddress, account, password, name, identityNum, code);
  135. if (errorCode == ErrorCode.ERR_Success)
  136. {
  137. Login(account, password).Coroutine();
  138. }
  139. else
  140. {
  141. ViewManager.Hide<ModalStatusView>();
  142. ErrorCodeController.Handler(errorCode);
  143. }
  144. }
  145. public static async ETTask GetServerInfos()
  146. {
  147. ViewManager.Show<ModalStatusView>("获取服务器列表...");
  148. int errorCode = await LoginHelper.GetServerInfos(GameGlobal.zoneScene);
  149. if (errorCode != ErrorCode.ERR_Success)
  150. {
  151. ViewManager.Hide<ModalStatusView>();
  152. ErrorCodeController.Handler(errorCode);
  153. await ETTask.Create();
  154. return;
  155. }
  156. var serverInfosComponent = GameGlobal.zoneScene.GetComponent<ServerInfosComponent>();
  157. if (serverInfosComponent.ServerInfoList.Count <= 0)
  158. {
  159. AlertSystem.Show("服务器列表为空:\n请检查网络和服务器状态")
  160. .SetRightButton(true, "知道啦", (object data) =>
  161. {
  162. Application.Quit();
  163. });
  164. await ETTask.Create();
  165. return;
  166. }
  167. if (serverInfosComponent.CurrentServerId <= 0)
  168. {
  169. var serverInfo = serverInfosComponent.ServerInfoList[0];
  170. serverInfosComponent.CurrentServerId = int.Parse(serverInfo.Id.ToString());
  171. }
  172. }
  173. public static async ETTask GetRoles()
  174. {
  175. ViewManager.Show<ModalStatusView>("获取角色信息...");
  176. int errorCode = await LoginHelper.GetRoles(GameGlobal.zoneScene);
  177. if (errorCode != ErrorCode.ERR_Success)
  178. {
  179. ErrorCodeController.Handler(errorCode);
  180. await ETTask.Create();
  181. }
  182. var roleInfosComponent = GameGlobal.zoneScene.GetComponent<RoleInfosComponent>();
  183. if (roleInfosComponent.RoleInfos != null && roleInfosComponent.RoleInfos.Count > 0)
  184. {
  185. var roleInfo = roleInfosComponent.RoleInfos[0];
  186. roleInfosComponent.CurrentRoleId = roleInfo.Id;
  187. await ReqEnterGame();
  188. }
  189. else
  190. {
  191. GameGlobal.isFirstEntry = true;
  192. ViewManager.Hide<ModalStatusView>();
  193. GameController.ShowCreateRole();
  194. }
  195. }
  196. public static async ETTask ReqCreateRole(string roleName)
  197. {
  198. ViewManager.Show<ModalStatusView>("创建角色中...");
  199. int errorCode = await ET.LoginHelper.CreateRole(GameGlobal.zoneScene, roleName);
  200. if (errorCode != ErrorCode.ERR_Success)
  201. {
  202. ViewManager.Hide<ModalStatusView>();
  203. ErrorCodeController.Handler(errorCode);
  204. return;
  205. }
  206. ViewManager.Hide(ViewName.CREATE_ROLE_VIEW);
  207. var roleInfosComponent = GameGlobal.zoneScene.GetComponent<RoleInfosComponent>();
  208. var roleInfo = roleInfosComponent.RoleInfos[0];
  209. roleInfosComponent.CurrentRoleId = roleInfo.Id;
  210. await ReqEnterGame();
  211. }
  212. public static async ETTask ReqEnterGame()
  213. {
  214. ViewManager.Show<ModalStatusView>("请求进入游戏...");
  215. int errorCode = await LoginHelper.GetRealmKey(GameGlobal.zoneScene);
  216. if (errorCode != ErrorCode.ERR_Success)
  217. {
  218. ViewManager.Hide<ModalStatusView>();
  219. ErrorCodeController.Handler(errorCode);
  220. return;
  221. }
  222. ViewManager.Hide<ModalStatusView>();
  223. ViewManager.Hide<LoginView>();
  224. ViewManager.Show<LoadingView>();
  225. LoadingView.Instance.SetProgress(99);
  226. LoadingView.Instance.SetDesc("正在进入游戏");
  227. LogServerHelper.SendNodeLog((int)LogNode.StartEnterGame);
  228. errorCode = await LoginHelper.EnterGame(GameGlobal.zoneScene);
  229. if (errorCode != ErrorCode.ERR_Success)
  230. {
  231. ErrorCodeController.Handler(errorCode);
  232. return;
  233. }
  234. await GameController.PreEnterGameAsync();
  235. ViewManager.Hide<ModalStatusView>();
  236. LogServerHelper.SendNodeLog((int)LogNode.OnEnterGame);
  237. }
  238. public static async ETTask ReqReConnectGate()
  239. {
  240. ViewManager.Show<ModalStatusView>("重新连接中...");
  241. int errorCode = await LoginHelper.EnterGame(GameGlobal.zoneScene);
  242. if (errorCode != ErrorCode.ERR_Success)
  243. {
  244. if(errorCode != ErrorCode.ERR_SessionStateError && errorCode != ErrorCode.ERR_NetWorkError)
  245. {
  246. Log.Error($"Reconnect fail, errorCode {errorCode}!");
  247. }
  248. AlertSystem.Show("重新连接失败,游戏或已更新,请重新进入游戏获得最佳体验。")
  249. .SetRightButton(true, "好的", (object data) =>
  250. {
  251. Application.Quit();
  252. });
  253. return;
  254. }
  255. EventAgent.DispatchEvent(ConstMessage.NUMERIC_CHANGE, NumericType.All);
  256. //重连成功请求邮件和公告等离线后会变更的数据
  257. NoticeSProxy.ReqSystemNoticeList().Coroutine();
  258. MailSProxy.ReqMailCount().Coroutine();
  259. FriendSProxy.ReqAllFriendInfos().Coroutine();
  260. PoemGallerySProxy.ReqGalleryTheme().Coroutine();
  261. ViewManager.Hide<ModalStatusView>();
  262. }
  263. }
  264. }