LoginHelper.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  1. using System;
  2. using GFGGame;
  3. using UnityEngine;
  4. namespace ET
  5. {
  6. public static class LoginHelper
  7. {
  8. public static async ETTask<(int, long)> H5Login(Scene zoneScene, string address, Action<int> callback)
  9. {
  10. A2C_LoginAccount a2CLoginAccount = null;
  11. Session accountSession = null;
  12. try
  13. {
  14. Debug.Log($"address:{address}");
  15. accountSession = zoneScene.GetComponent<NetWSComponent>()
  16. .Create(null, address);
  17. a2CLoginAccount = (A2C_LoginAccount)await accountSession.Call(new C2A_H5Login()
  18. {
  19. user_id = QDJGameManager.Instance.UserId,
  20. user_name = QDJGameManager.Instance.UserName,
  21. uuid = QDJGameManager.Instance.Uuid,
  22. sign = QDJGameManager.Instance.Sign,
  23. timestamp = QDJGameManager.Instance.Timestamp,
  24. cp_ext = QDJGameManager.Instance.CpExt,
  25. Version = GameConst.SERVER_VERSION,
  26. PlatformId = LauncherConfig.platformId,
  27. ChannelId = LauncherConfig.ChannelId,
  28. CancelDelete = false,
  29. });
  30. }
  31. catch (Exception e)
  32. {
  33. Log.Debug("打印报错:" + e.ToString());
  34. return (ErrorCode.ERR_NetWorkError, 0);
  35. }
  36. if (a2CLoginAccount.Error != ErrorCode.ERR_Success)
  37. {
  38. return (a2CLoginAccount.Error, a2CLoginAccount.DeleteTime);
  39. }
  40. OnLoginSuccess(zoneScene, a2CLoginAccount, accountSession, QDJGameManager.Instance.UserId);
  41. callback?.Invoke(a2CLoginAccount.Error);
  42. return (ErrorCode.ERR_Success, 0);
  43. }
  44. public static async ETTask<(int, long)> Login(Scene zoneScene, string address, string account, string password,
  45. bool isMD5, bool cancelDelete)
  46. {
  47. A2C_LoginAccount a2CLoginAccount = null;
  48. Session accountSession = null;
  49. try
  50. {
  51. accountSession = zoneScene.GetComponent<NetWSComponent>()
  52. .Create(null, address);
  53. var passwordMD5 = password;
  54. //密码禁止明文传输
  55. if (!isMD5)
  56. {
  57. passwordMD5 = MD5Helper.stringMD5(password);
  58. }
  59. a2CLoginAccount = (A2C_LoginAccount)await accountSession.Call(new C2A_LoginAccount()
  60. {
  61. Account = account,
  62. Password = passwordMD5,
  63. Version = GameConst.SERVER_VERSION,
  64. PlatformId = LauncherConfig.platformId,
  65. ChannelId = LauncherConfig.ChannelId,
  66. CancelDelete = cancelDelete
  67. });
  68. }
  69. catch (Exception e)
  70. {
  71. //accountSession?.Dispose();
  72. Log.Debug(e.ToString());
  73. return (ErrorCode.ERR_NetWorkError, 0);
  74. }
  75. if (a2CLoginAccount.Error != ErrorCode.ERR_Success)
  76. {
  77. //accountSession?.Dispose();
  78. return (a2CLoginAccount.Error, a2CLoginAccount.DeleteTime);
  79. }
  80. OnLoginSuccess(zoneScene, a2CLoginAccount, accountSession, account);
  81. return (ErrorCode.ERR_Success, 0);
  82. }
  83. public static void OnLoginSuccess(Scene zoneScene, A2C_LoginAccount a2CLoginAccount, Session accountSession,
  84. string account)
  85. {
  86. zoneScene.GetComponent<SessionComponent>().AccountSession = accountSession;
  87. accountSession.AddComponent<PingComponent>();
  88. accountSession.AddComponent<DisConnectedCompnent>().SessionState = SessionState.Login;
  89. zoneScene.GetComponent<SessionComponent>().SessionState = SessionState.Login;
  90. AccountInfoComponent accountInfoComponent = zoneScene.GetComponent<AccountInfoComponent>();
  91. accountInfoComponent.Token = a2CLoginAccount.Token;
  92. accountInfoComponent.AccountId = a2CLoginAccount.AccountId;
  93. accountInfoComponent.Account = account;
  94. accountInfoComponent.Age = a2CLoginAccount.Age;
  95. GameGlobal.userAge = a2CLoginAccount.Age;
  96. }
  97. public static async ETTask<int> Register(Scene zoneScene, string address, string account, string password,
  98. string name, string identityNum, string code)
  99. {
  100. A2C_Register r2C_Register = null;
  101. Session session = null;
  102. try
  103. {
  104. session = zoneScene.GetComponent<NetWSComponent>().Create(null, address);
  105. {
  106. //密码禁止明文传输
  107. var passwordMD5 = MD5Helper.stringMD5(password);
  108. r2C_Register = (A2C_Register)await session.Call(new C2A_Register()
  109. {
  110. Account = account,
  111. Password = passwordMD5,
  112. Name = name,
  113. IdentityNum = identityNum,
  114. Code = code,
  115. PlatformId = LauncherConfig.platformId,
  116. ChannelId = LauncherConfig.ChannelId
  117. });
  118. if (r2C_Register.Error != ErrorCode.ERR_Success)
  119. {
  120. return r2C_Register.Error;
  121. }
  122. }
  123. }
  124. catch (Exception e)
  125. {
  126. //session?.Dispose();
  127. Log.Debug(e.ToString());
  128. return ErrorCode.ERR_NetWorkError;
  129. }
  130. return ErrorCode.ERR_Success;
  131. }
  132. public static async ETTask<int> GetServerInfos(Scene zoneScene)
  133. {
  134. A2C_GetServerInfos a2C_GetServerInfos = null;
  135. try
  136. {
  137. a2C_GetServerInfos = (A2C_GetServerInfos)await zoneScene.GetComponent<SessionComponent>().AccountSession
  138. ?.Call(new C2A_GetServerInfos()
  139. {
  140. AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
  141. Token = zoneScene.GetComponent<AccountInfoComponent>().Token
  142. });
  143. }
  144. catch (Exception e)
  145. {
  146. Log.Debug(e.ToString());
  147. return ErrorCode.ERR_NetWorkError;
  148. }
  149. if (a2C_GetServerInfos.Error != ErrorCode.ERR_Success)
  150. {
  151. return a2C_GetServerInfos.Error;
  152. }
  153. zoneScene.GetComponent<ServerInfosComponent>()?.ServerInfoList?.Clear();
  154. foreach (var serverInfoProto in a2C_GetServerInfos.ServerInfosList)
  155. {
  156. ServerInfo serverInfo = zoneScene.GetComponent<ServerInfosComponent>().AddChild<ServerInfo>();
  157. serverInfo.FromMessage(serverInfoProto);
  158. zoneScene.GetComponent<ServerInfosComponent>().Add(serverInfo);
  159. }
  160. zoneScene.GetComponent<ServerInfosComponent>().SetRecentlyServerInfo(a2C_GetServerInfos.RecentId);
  161. await ETTask.CompletedTask;
  162. return ErrorCode.ERR_Success;
  163. }
  164. public static async ETTask<int> GetRoles(Scene zoneScene)
  165. {
  166. A2C_GetRoles a2C_GetRoles = null;
  167. try
  168. {
  169. a2C_GetRoles = (A2C_GetRoles)await zoneScene.GetComponent<SessionComponent>().AccountSession.Call(
  170. new C2A_GetRoles()
  171. {
  172. AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
  173. Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
  174. ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
  175. });
  176. }
  177. catch (Exception e)
  178. {
  179. Log.Debug(e.ToString());
  180. return ErrorCode.ERR_NetWorkError;
  181. }
  182. if (a2C_GetRoles.Error != ErrorCode.ERR_Success)
  183. {
  184. //Log.Error(a2C_GetRoles.Error.ToString());
  185. return a2C_GetRoles.Error;
  186. }
  187. zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.Clear();
  188. foreach (var roleInfoProto in a2C_GetRoles.RoleInfos)
  189. {
  190. RoleInfo roleInfo = zoneScene.GetComponent<RoleInfosComponent>().AddChild<RoleInfo>();
  191. roleInfo.FromMessage(roleInfoProto);
  192. zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.Add(roleInfo);
  193. }
  194. return ErrorCode.ERR_Success;
  195. }
  196. public static async ETTask<int> CreateRole(Scene zoneScene, string name)
  197. {
  198. A2C_CreateRole a2C_CreateRole = null;
  199. try
  200. {
  201. a2C_CreateRole = (A2C_CreateRole)await zoneScene.GetComponent<SessionComponent>().AccountSession?.Call(
  202. new C2A_CreateRole
  203. {
  204. AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
  205. Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
  206. Name = name,
  207. ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
  208. });
  209. }
  210. catch (Exception e)
  211. {
  212. Log.Debug(e.ToString());
  213. return ErrorCode.ERR_NetWorkError;
  214. }
  215. if (a2C_CreateRole.Error != ErrorCode.ERR_Success)
  216. {
  217. //Log.Error(a2C_CreateRole.Error.ToString());
  218. return a2C_CreateRole.Error;
  219. }
  220. RoleInfo newRoleInfo = zoneScene.GetComponent<RoleInfosComponent>().AddChild<RoleInfo>();
  221. newRoleInfo.FromMessage(a2C_CreateRole.RoleInfo);
  222. zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.Add(newRoleInfo);
  223. return ErrorCode.ERR_Success;
  224. }
  225. public static async ETTask<int> DeleteRole(Scene zoneScene, long roleId)
  226. {
  227. A2C_DeleteRole a2C_DeleteRole = null;
  228. try
  229. {
  230. a2C_DeleteRole = (A2C_DeleteRole)await zoneScene.GetComponent<SessionComponent>().AccountSession?.Call(
  231. new C2A_DeleteRole()
  232. {
  233. AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
  234. Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
  235. RoleInfoId = roleId,
  236. ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
  237. });
  238. }
  239. catch (Exception e)
  240. {
  241. Log.Debug(e.ToString());
  242. return ErrorCode.ERR_NetWorkError;
  243. }
  244. if (a2C_DeleteRole.Error != ErrorCode.ERR_Success)
  245. {
  246. //Log.Error(a2C_DeleteRole.Error.ToString());
  247. return a2C_DeleteRole.Error;
  248. }
  249. int index = zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.FindIndex((info) =>
  250. {
  251. return info.Id == a2C_DeleteRole.DeleteRoleInfoId;
  252. });
  253. zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.RemoveAt(index);
  254. await ETTask.CompletedTask;
  255. return ErrorCode.ERR_Success;
  256. }
  257. public static async ETTask<int> GetRealmKey(Scene zoneScene)
  258. {
  259. A2C_GetRealmKey a2C_GetRealmKey = null;
  260. try
  261. {
  262. a2C_GetRealmKey = (A2C_GetRealmKey)await zoneScene.GetComponent<SessionComponent>().AccountSession
  263. ?.Call(new C2A_GetRealmKey()
  264. {
  265. AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
  266. Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
  267. ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
  268. });
  269. }
  270. catch (Exception e)
  271. {
  272. Log.Debug(e.ToString());
  273. return ErrorCode.ERR_NetWorkError;
  274. }
  275. if (a2C_GetRealmKey.Error != ErrorCode.ERR_Success)
  276. {
  277. //Log.Error(a2C_GetRealmKey.Error.ToString());
  278. return a2C_GetRealmKey.Error;
  279. }
  280. zoneScene.GetComponent<AccountInfoComponent>().RealmKey = a2C_GetRealmKey.RealmKey;
  281. zoneScene.GetComponent<AccountInfoComponent>().RealmAddress = a2C_GetRealmKey.RealmAddress;
  282. //zoneScene.GetComponent<SessionComponent>().DisconnectAccount();
  283. await ETTask.CompletedTask;
  284. return ErrorCode.ERR_Success;
  285. }
  286. public static async ETTask<int> EnterGame(Scene zoneScene)
  287. {
  288. string realmAddress = zoneScene.GetComponent<AccountInfoComponent>().RealmAddress;
  289. //1.连接Realm,获取分配的Gate
  290. R2C_LoginRealm r2C_LoginRealm = null;
  291. Session session = zoneScene.GetComponent<NetWSComponent>()
  292. .Create(null, realmAddress);
  293. try
  294. {
  295. r2C_LoginRealm = (R2C_LoginRealm)await session.Call(new C2R_LoginRealm()
  296. {
  297. AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
  298. RealmTokenKey = zoneScene.GetComponent<AccountInfoComponent>().RealmKey
  299. });
  300. }
  301. catch (Exception e)
  302. {
  303. Log.Debug(e.ToString());
  304. //session?.Dispose();
  305. return ErrorCode.ERR_NetWorkError;
  306. }
  307. //session?.Dispose();
  308. if (r2C_LoginRealm.Error != ErrorCode.ERR_Success)
  309. {
  310. return r2C_LoginRealm.Error;
  311. }
  312. LogUtil.LogDev($"GateAddress : {r2C_LoginRealm.GateAddress}");
  313. Session gateSession = zoneScene.GetComponent<NetWSComponent>()
  314. .Create(null, r2C_LoginRealm.GateAddress);
  315. gateSession.AddComponent<PingComponent>();
  316. gateSession.AddComponent<DisConnectedCompnent>().SessionState = SessionState.Gate;
  317. zoneScene.GetComponent<SessionComponent>().GateSession = gateSession;
  318. zoneScene.GetComponent<SessionComponent>().SessionState = SessionState.Gate;
  319. //2.开始连接Gate
  320. long currentRoleId = zoneScene.GetComponent<RoleInfosComponent>().CurrentRoleId;
  321. G2C_LoginGate g2C_LoginGate = null;
  322. try
  323. {
  324. long accountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId;
  325. g2C_LoginGate = (G2C_LoginGate)await gateSession.Call(new C2G_LoginGate()
  326. {
  327. Key = r2C_LoginRealm.GateSessionKey,
  328. AccountId = accountId,
  329. RoleId = currentRoleId
  330. });
  331. }
  332. catch (Exception e)
  333. {
  334. Log.Debug(e.ToString());
  335. //zoneScene.GetComponent<SessionComponent>().GateSession?.Dispose();
  336. return ErrorCode.ERR_NetWorkError;
  337. }
  338. if (g2C_LoginGate.Error != ErrorCode.ERR_Success)
  339. {
  340. //zoneScene.GetComponent<SessionComponent>().GateSession?.Dispose();
  341. return g2C_LoginGate.Error;
  342. }
  343. LogUtil.LogDev("登陆gate成功!");
  344. //3.角色正式请求进入游戏逻辑服
  345. G2C_EnterGame g2C_EnterGame = null;
  346. try
  347. {
  348. g2C_EnterGame = (G2C_EnterGame)await gateSession.Call(new C2G_EnterGame() { });
  349. }
  350. catch (Exception e)
  351. {
  352. Log.Debug(e.ToString());
  353. //zoneScene.GetComponent<SessionComponent>().GateSession.Dispose();
  354. return ErrorCode.ERR_NetWorkError;
  355. }
  356. if (g2C_EnterGame.Error != ErrorCode.ERR_Success)
  357. {
  358. //Log.Error(g2C_EnterGame.Error.ToString());
  359. return g2C_EnterGame.Error;
  360. }
  361. zoneScene.GetComponent<PlayerComponent>().MyId = g2C_EnterGame.MyId;
  362. var result = await GameGlobal.zoneScene.GetComponent<ObjectWait>()
  363. .Wait<ET.WaitType.Wait_SceneChangeStart>();
  364. if (result.Error == WaitTypeError.Cancel)
  365. {
  366. return ErrorCode.ERR_Cancel;
  367. }
  368. LogUtil.LogDev("角色进入游戏成功!");
  369. return ErrorCode.ERR_Success;
  370. }
  371. public static async ETTask<int> ReqGetLatestNotice()
  372. {
  373. A2C_GetLatestNotice response = null;
  374. try
  375. {
  376. response = (A2C_GetLatestNotice)await GameGlobal.zoneScene.GetComponent<SessionComponent>()
  377. .AccountSession?.Call(new C2A_GetLatestNotice());
  378. }
  379. catch (Exception e)
  380. {
  381. Log.Debug(e.ToString());
  382. return ErrorCode.ERR_NetWorkError;
  383. }
  384. if (response.Error != ErrorCode.ERR_Success)
  385. {
  386. //Log.Error(response.Error.ToString());
  387. return response.Error;
  388. }
  389. NoticeInfo noticeInfo = new NoticeInfo();
  390. noticeInfo.noticeId = response.NoticeId;
  391. noticeInfo.title = response.Title;
  392. noticeInfo.time = response.TimeSec * 1000;
  393. noticeInfo.content = response.Content;
  394. NoticeDataManager.Instance.LastNoticeInfo = noticeInfo;
  395. return ErrorCode.ERR_Success;
  396. }
  397. public static async ETTask<(int, string)> ReqRandomRoleName()
  398. {
  399. A2C_GetRandomRoleName response = null;
  400. bool notLogin = false;
  401. Session accountSession = GameGlobal.zoneScene.GetComponent<SessionComponent>().AccountSession;
  402. if (accountSession == null || accountSession.IsDisposed)
  403. {
  404. notLogin = true;
  405. accountSession = GameGlobal.zoneScene.GetComponent<NetWSComponent>()
  406. .Create(null, GameConfig.LoginAddress);
  407. }
  408. try
  409. {
  410. response = (A2C_GetRandomRoleName)await accountSession?.Call(new C2A_GetRandomRoleName()
  411. {
  412. ServerId = GameGlobal.zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId
  413. });
  414. }
  415. catch (Exception e)
  416. {
  417. Log.Debug(e.ToString());
  418. if (notLogin)
  419. {
  420. // accountSession?.Dispose();
  421. }
  422. return (ErrorCode.ERR_NetWorkError, "");
  423. }
  424. if (response.Error != ErrorCode.ERR_Success)
  425. {
  426. //Log.Error(response.Error.ToString());
  427. if (notLogin)
  428. {
  429. //accountSession?.Dispose();
  430. }
  431. return (ErrorCode.ERR_NetWorkError, "");
  432. }
  433. if (notLogin)
  434. {
  435. //accountSession?.Dispose();
  436. }
  437. return (ErrorCode.ERR_Success, response.Name);
  438. }
  439. //玩家信息登记
  440. public static async ETTask<int> RegisterRoleInfo(Scene zoneScene, string account,
  441. string password,
  442. string name, string identityNum, string code, string phoneNumber)
  443. {
  444. var passwordMD5 = MD5Helper.stringMD5(password);
  445. M2C_RegisterRoleInfo response = (M2C_RegisterRoleInfo)await MessageHelper.SendToServer(
  446. new C2M_RegisterRoleInfo
  447. {
  448. PhoneNumber = phoneNumber,
  449. VerificationCode = code,
  450. Account = account,
  451. Password = passwordMD5,
  452. IdCard = identityNum,
  453. CardName = name
  454. });
  455. if (response.Error != ErrorCode.ERR_Success)
  456. {
  457. return response.Error;
  458. }
  459. else
  460. {
  461. BonusController.TryShowBonusList(ItemUtil.CreateItemDataList(response.RewardList));
  462. }
  463. return ErrorCode.ERR_Success;
  464. }
  465. }
  466. }