LoginHelper.cs 20 KB

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