LoginHelper.cs 16 KB

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