LoginHelper.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. namespace ET.Client
  5. {
  6. public static class LoginHelper
  7. {
  8. public static async ETTask<int> Login(Scene clientScene, string account, string password)
  9. {
  10. try
  11. {
  12. // 创建一个ETModel层的Session
  13. clientScene.RemoveComponent<RouterAddressComponent>();
  14. clientScene.RemoveComponent<NetClientComponent>();
  15. clientScene.RemoveComponent<SessionComponent>();
  16. clientScene.RemoveComponent<AccountInfoComponent>();
  17. // 获取路由跟realmDispatcher地址
  18. RouterAddressComponent routerAddressComponent = clientScene.GetComponent<RouterAddressComponent>();
  19. if (routerAddressComponent == null)
  20. {
  21. routerAddressComponent =
  22. clientScene.AddComponent<RouterAddressComponent, string, int>(ConstValue.RouterHttpHost, ConstValue.RouterHttpPort);
  23. await routerAddressComponent.Init();
  24. clientScene.AddComponent<NetClientComponent, AddressFamily>(routerAddressComponent.RouterManagerIPAddress.AddressFamily);
  25. }
  26. IPEndPoint realmAddress = routerAddressComponent.GetRealmAddress(account);
  27. // 登陆验证
  28. R2C_Login r2CLogin;
  29. using (Session session = await RouterHelper.CreateRouterSession(clientScene, realmAddress))
  30. {
  31. r2CLogin = (R2C_Login)await session.Call(new C2R_Login() { Account = account, Password = MD5Helper.StringMD5(password) });
  32. }
  33. if (r2CLogin.Error != ErrorCode.ERR_Success)
  34. {
  35. Log.Debug($"登陆验证错误...errCode={r2CLogin.Error}");
  36. return r2CLogin.Error;
  37. }
  38. // 创建一个gate Session,并且保存到SessionComponent中
  39. Session gateSession = await RouterHelper.CreateRouterSession(clientScene, NetworkHelper.ToIPEndPoint(r2CLogin.Address[0]));
  40. // 登陆gate
  41. G2C_LoginGame g2CLoginGate = (G2C_LoginGame)await gateSession.Call(new C2G_LoginGame() { Token = r2CLogin.Token, UserId = r2CLogin.UserId });
  42. if (g2CLoginGate.Error != ErrorCode.ERR_Success)
  43. {
  44. Log.Debug($"登陆game错误...errCode={g2CLoginGate.Error}");
  45. return g2CLoginGate.Error;
  46. }
  47. // 保存账号信息
  48. clientScene.AddComponent<SessionComponent>().Session = gateSession;
  49. var accountComponet = clientScene.AddComponent<AccountInfoComponent>();
  50. accountComponet.Token = r2CLogin.Token;
  51. accountComponet.UserId = r2CLogin.UserId;
  52. Log.Debug($"登陆game成功...token={r2CLogin.Token}, userId={r2CLogin.UserId}");
  53. //var player = g2CLoginGate.Players[0];
  54. //TODO:选角进入
  55. //使用简化流程直接进入游戏
  56. var ret = (G2C_BindPlayer)await gateSession.Call(new C2G_BindPlayer() { PlayerId = 0 });
  57. await EventSystem.Instance.PublishAsync(clientScene, new EventType.LoginFinish() { player = ret.Player});
  58. }
  59. catch (Exception e)
  60. {
  61. Log.Error($"登陆出错...{e.Message}");
  62. return ErrorCode.ERR_LoginError;
  63. }
  64. return ErrorCode.ERR_Success;
  65. }
  66. }
  67. }