LoginHelper.cs 20 KB

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