LoginHelper.cs 17 KB

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