LoginHelper.cs 17 KB

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