LoginHelper.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. // 获取路由跟realmDispatcher地址
  15. RouterAddressComponent routerAddressComponent = clientScene.GetComponent<RouterAddressComponent>();
  16. if (routerAddressComponent == null)
  17. {
  18. routerAddressComponent =
  19. clientScene.AddComponent<RouterAddressComponent, string, int>(ConstValue.RouterHttpHost, ConstValue.RouterHttpPort);
  20. await routerAddressComponent.Init();
  21. clientScene.AddComponent<NetClientComponent, AddressFamily>(routerAddressComponent.RouterManagerIPAddress.AddressFamily);
  22. }
  23. IPEndPoint realmAddress = routerAddressComponent.GetRealmAddress(account);
  24. // 登陆验证
  25. R2C_Login r2CLogin;
  26. using (Session session = await RouterHelper.CreateRouterSession(clientScene, realmAddress))
  27. {
  28. r2CLogin = (R2C_Login)await session.Call(new C2R_Login() { Account = account, Password = MD5Helper.StringMD5(password) });
  29. }
  30. if (r2CLogin.Error != ErrorCode.ERR_Success)
  31. {
  32. Log.Debug($"登陆验证错误...errCode={r2CLogin.Error}");
  33. return r2CLogin.Error;
  34. }
  35. // 创建一个gate Session,并且保存到SessionComponent中
  36. Session gateSession = await RouterHelper.CreateRouterSession(clientScene, NetworkHelper.ToIPEndPoint(r2CLogin.Address));
  37. // 登陆gate
  38. G2C_LoginGate g2CLoginGate = (G2C_LoginGate)await gateSession.Call(new C2G_LoginGate() { Token = r2CLogin.Token });
  39. if (g2CLoginGate.Error != ErrorCode.ERR_Success)
  40. {
  41. Log.Debug($"登陆gate错误...errCode={g2CLoginGate.Error}");
  42. return g2CLoginGate.Error;
  43. }
  44. // 保存账号信息
  45. clientScene.AddComponent<SessionComponent>().Session = gateSession;
  46. var accountComponet = clientScene.AddComponent<AccountInfoComponent>();
  47. accountComponet.Token = r2CLogin.Token;
  48. accountComponet.UserId = r2CLogin.UserId;
  49. var player = g2CLoginGate.Player;
  50. Log.Debug($"登陆gate成功...token={r2CLogin.Token}, userId={r2CLogin.UserId}, playerId={player.id}");
  51. await EventSystem.Instance.PublishAsync(clientScene, new EventType.LoginFinish());
  52. }
  53. catch (Exception e)
  54. {
  55. Log.Error($"登陆出错...{e.Message}");
  56. return ErrorCode.ERR_LoginError;
  57. }
  58. return ErrorCode.ERR_Success;
  59. }
  60. }
  61. }