LoginHelper.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  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. ChannelId = 101,
  19. PlatformId = 1,
  20. });
  21. }
  22. catch (Exception e)
  23. {
  24. accountSession?.Dispose();
  25. //Log.Debug(e.ToString());
  26. Log.Debug("机器人 account : " + account + ",无密码登陆报错,报错为:" + e.ToString());
  27. return ErrorCode.ERR_NetWorkError;
  28. }
  29. if (a2CLoginAccount.Error != ErrorCode.ERR_Success)
  30. {
  31. accountSession?.Dispose();
  32. Log.Debug("机器人 account : " + account + ",无密码登陆失败,A2C_LoginAccount返回值为:" + a2CLoginAccount.Error);
  33. return a2CLoginAccount.Error;
  34. }
  35. zoneScene.AddComponent<SessionComponent>().Session = accountSession;
  36. accountSession.AddComponent<PingComponent>();
  37. AccountInfoComponent accountInfoComponent = zoneScene.AddComponent<AccountInfoComponent>();
  38. accountInfoComponent.Token = a2CLoginAccount.Token;
  39. accountInfoComponent.AccountId = a2CLoginAccount.AccountId;
  40. accountInfoComponent.Account = account;
  41. await ETTask.CompletedTask;
  42. return ErrorCode.ERR_Success;
  43. }
  44. //获取服务器列表--并且根据索引写死一个CurrentServerId
  45. public static async ETTask<int> GetServerInfos(Scene zoneScene)
  46. {
  47. A2C_GetServerInfos a2C_GetServerInfos = null;
  48. try
  49. {
  50. a2C_GetServerInfos = (A2C_GetServerInfos)await zoneScene.GetComponent<SessionComponent>().Session?.Call(
  51. new C2A_GetServerInfos()
  52. {
  53. AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
  54. Token = zoneScene.GetComponent<AccountInfoComponent>().Token
  55. });
  56. }
  57. catch (Exception e)
  58. {
  59. //Log.Error(e.ToString());
  60. Log.Error("有个机器人请求协议A2C_GetServerInfos获取服务器列表报错,报错为:" + e.ToString());
  61. return ErrorCode.ERR_NetWorkError;
  62. }
  63. if (a2C_GetServerInfos.Error != ErrorCode.ERR_Success)
  64. {
  65. Log.Error("有个机器人请求协议A2C_GetServerInfos获取服务器列表失败,返回值为:" + a2C_GetServerInfos.Error);
  66. return a2C_GetServerInfos.Error;
  67. }
  68. zoneScene.AddComponent<ServerInfosComponent>();
  69. foreach (var serverInfoProto in a2C_GetServerInfos.ServerInfosList)
  70. {
  71. //直接
  72. ServerInfo serverInfo = zoneScene.GetComponent<ServerInfosComponent>().AddChild<ServerInfo>();
  73. serverInfo.FromMessage(serverInfoProto);
  74. zoneScene.GetComponent<ServerInfosComponent>().ServerInfosList.Add(serverInfo);
  75. }
  76. zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId = Game.Options.ServerId;
  77. await ETTask.CompletedTask;
  78. return ErrorCode.ERR_Success;
  79. }
  80. //获取角色信息--选中第一个角色--机器人角色
  81. public static async ETTask<int> GetRoles(Scene zoneScene)
  82. {
  83. A2C_GetRoles a2C_GetRoles = null;
  84. try
  85. {
  86. a2C_GetRoles = (A2C_GetRoles)await zoneScene.GetComponent<SessionComponent>().Session?.Call(
  87. new C2A_GetRoles()
  88. {
  89. AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
  90. Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
  91. ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
  92. });
  93. }
  94. catch (Exception e)
  95. {
  96. Log.Error("zone A2C_GetRoles,error:" + e.ToString());
  97. return ErrorCode.ERR_NetWorkError;
  98. }
  99. if (a2C_GetRoles.Error != ErrorCode.ERR_Success)
  100. {
  101. Log.Error("zone A2C_GetRoles,teturn error:" + a2C_GetRoles.Error);
  102. return a2C_GetRoles.Error;
  103. }
  104. zoneScene.AddComponent<RoleInfosComponent>().RoleInfos.Clear();
  105. foreach (var roleInfoProto in a2C_GetRoles.RoleInfos)
  106. {
  107. RoleInfo roleInfo = zoneScene.GetComponent<RoleInfosComponent>().AddChild<RoleInfo>();
  108. roleInfo.FromMessage(roleInfoProto);
  109. zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.Add(roleInfo);
  110. AllRoleInfoComponent.Instance.AddRole(roleInfo);
  111. }
  112. //选中第一个角色索引
  113. if (a2C_GetRoles.RoleInfos != null && a2C_GetRoles.RoleInfos.Count > 0)
  114. {
  115. zoneScene.GetComponent<RoleInfosComponent>().CurrentRoleId = a2C_GetRoles.RoleInfos[0].Id;
  116. }
  117. await ETTask.CompletedTask;
  118. return ErrorCode.ERR_Success;
  119. }
  120. //创角
  121. public static async ETTask<int> CreateRole(Scene zoneScene, string name)
  122. {
  123. A2C_CreateRole a2C_CreateRole = null;
  124. try
  125. {
  126. a2C_CreateRole = (A2C_CreateRole)await zoneScene.GetComponent<SessionComponent>().Session?.Call(
  127. new C2A_CreateRole
  128. {
  129. AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
  130. Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
  131. Name = name,
  132. ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
  133. });
  134. }
  135. catch (Exception e)
  136. {
  137. Log.Error(e.ToString());
  138. return ErrorCode.ERR_NetWorkError;
  139. }
  140. if (a2C_CreateRole.Error != ErrorCode.ERR_Success)
  141. {
  142. //Log.Error(a2C_CreateRole.Error.ToString());
  143. return a2C_CreateRole.Error;
  144. }
  145. RoleInfo newRoleInfo = zoneScene.GetComponent<RoleInfosComponent>().AddChild<RoleInfo>();
  146. newRoleInfo.FromMessage(a2C_CreateRole.RoleInfo);
  147. zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.Add(newRoleInfo);
  148. AllRoleInfoComponent.Instance.AddRole(newRoleInfo);
  149. //创建好角色,再次给机器人一个角色
  150. zoneScene.GetComponent<RoleInfosComponent>().CurrentRoleId = newRoleInfo.RoleInfoId;
  151. await ETTask.CompletedTask;
  152. return ErrorCode.ERR_Success;
  153. }
  154. public static async ETTask<int> GetRealmKey(Scene zoneScene)
  155. {
  156. A2C_GetRealmKey a2C_GetRealmKey = null;
  157. try
  158. {
  159. a2C_GetRealmKey = (A2C_GetRealmKey)await zoneScene.GetComponent<SessionComponent>().Session?.Call(
  160. new C2A_GetRealmKey()
  161. {
  162. AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
  163. Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
  164. ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
  165. });
  166. }
  167. catch (Exception e)
  168. {
  169. Log.Error(e.ToString());
  170. return ErrorCode.ERR_NetWorkError;
  171. }
  172. if (a2C_GetRealmKey.Error != ErrorCode.ERR_Success)
  173. {
  174. Log.Error(a2C_GetRealmKey.Error.ToString());
  175. return a2C_GetRealmKey.Error;
  176. }
  177. zoneScene.GetComponent<AccountInfoComponent>().RealmKey = a2C_GetRealmKey.RealmKey;
  178. zoneScene.GetComponent<AccountInfoComponent>().RealmAddress = a2C_GetRealmKey.RealmAddress;
  179. zoneScene.GetComponent<SessionComponent>().Disconnect();
  180. await ETTask.CompletedTask;
  181. return ErrorCode.ERR_Success;
  182. }
  183. public static async ETTask<int> EnterGame(Scene zoneScene)
  184. {
  185. string realmAddress = zoneScene.GetComponent<AccountInfoComponent>().RealmAddress;
  186. //1.连接Realm,获取分配的Gate
  187. R2C_LoginRealm r2C_LoginRealm = null;
  188. Session session = zoneScene.GetComponent<NetKcpComponent>()
  189. .Create(NetworkHelper.ToIPEndPoint(realmAddress));
  190. try
  191. {
  192. r2C_LoginRealm = (R2C_LoginRealm)await session.Call(new C2R_LoginRealm()
  193. {
  194. AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
  195. RealmTokenKey = zoneScene.GetComponent<AccountInfoComponent>().RealmKey
  196. });
  197. }
  198. catch (Exception e)
  199. {
  200. Log.Error(e);
  201. session?.Dispose();
  202. return ErrorCode.ERR_NetWorkError;
  203. }
  204. session?.Dispose();
  205. if (r2C_LoginRealm.Error != ErrorCode.ERR_Success)
  206. {
  207. return r2C_LoginRealm.Error;
  208. }
  209. Log.Warning($"GateAddress : {r2C_LoginRealm.GateAddress}");
  210. Session gateSession = zoneScene.GetComponent<NetKcpComponent>()
  211. .Create(NetworkHelper.ToIPEndPoint(r2C_LoginRealm.GateAddress));
  212. gateSession.AddComponent<PingComponent>();
  213. zoneScene.GetComponent<SessionComponent>().Session = gateSession;
  214. //2.开始连接Gate
  215. long currentRoleId =
  216. zoneScene.GetComponent<RoleInfosComponent>().CurrentRoleId; //要选角色,不然走到这里CurrentRoleId没值
  217. G2C_LoginGate g2C_LoginGate = null;
  218. try
  219. {
  220. long accountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId;
  221. g2C_LoginGate = (G2C_LoginGate)await gateSession.Call(new C2G_LoginGate()
  222. {
  223. Key = r2C_LoginRealm.GateSessionKey,
  224. AccountId = accountId,
  225. RoleId = currentRoleId
  226. });
  227. }
  228. catch (Exception e)
  229. {
  230. Log.Error(e);
  231. zoneScene.GetComponent<SessionComponent>().Session?.Dispose();
  232. return ErrorCode.ERR_NetWorkError;
  233. }
  234. if (g2C_LoginGate.Error != ErrorCode.ERR_Success)
  235. {
  236. zoneScene.GetComponent<SessionComponent>().Session?.Dispose();
  237. return g2C_LoginGate.Error;
  238. }
  239. Log.Debug("登陆gate成功!");
  240. //3.角色正式请求进入游戏逻辑服
  241. G2C_EnterGame g2C_EnterGame = null;
  242. try
  243. {
  244. g2C_EnterGame = (G2C_EnterGame)await gateSession.Call(new C2G_EnterGame() { });
  245. }
  246. catch (Exception e)
  247. {
  248. Log.Error(e);
  249. zoneScene.GetComponent<SessionComponent>().Session.Dispose();
  250. return ErrorCode.ERR_NetWorkError;
  251. }
  252. if (g2C_EnterGame.Error != ErrorCode.ERR_Success)
  253. {
  254. Log.Error(g2C_EnterGame.Error.ToString());
  255. return g2C_EnterGame.Error;
  256. }
  257. Log.Debug("角色进入游戏成功!");
  258. zoneScene.GetComponent<PlayerComponent>().MyId = g2C_EnterGame.MyId;
  259. await ETTask.CompletedTask;
  260. return ErrorCode.ERR_Success;
  261. }
  262. public static async ETTask<int> ReqGetLatestNotice(Scene zoneScene)
  263. {
  264. A2C_GetLatestNotice response = null;
  265. try
  266. {
  267. response = (A2C_GetLatestNotice)await zoneScene.GetComponent<SessionComponent>().Session
  268. ?.Call(new C2A_GetLatestNotice());
  269. }
  270. catch (Exception e)
  271. {
  272. Log.Error(e.ToString());
  273. return ErrorCode.ERR_NetWorkError;
  274. }
  275. if (response.Error != ErrorCode.ERR_Success)
  276. {
  277. Log.Error(response.Error.ToString());
  278. return response.Error;
  279. }
  280. await ETTask.CompletedTask;
  281. return ErrorCode.ERR_Success;
  282. }
  283. public static async ETTask<(int, string)> ReqRandomRoleName(Scene zoneScene)
  284. {
  285. A2C_GetRandomRoleName response = null;
  286. try
  287. {
  288. response = (A2C_GetRandomRoleName)await zoneScene.GetComponent<SessionComponent>().Session
  289. ?.Call(new C2A_GetRandomRoleName());
  290. }
  291. catch (Exception e)
  292. {
  293. Log.Debug(e.ToString());
  294. return (ErrorCode.ERR_NetWorkError, "");
  295. }
  296. if (response.Error != ErrorCode.ERR_Success)
  297. {
  298. Log.Debug(response.Error.ToString());
  299. return (ErrorCode.ERR_NetWorkError, "");
  300. }
  301. await ETTask.CompletedTask;
  302. return (ErrorCode.ERR_Success, response.Name);
  303. }
  304. }
  305. }