UILoginComponent.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using System.Net;
  3. using ETModel;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. namespace ETHotfix
  7. {
  8. [ObjectSystem]
  9. public class UiLoginComponentSystem : AwakeSystem<UILoginComponent>
  10. {
  11. public override void Awake(UILoginComponent self)
  12. {
  13. self.Awake();
  14. }
  15. }
  16. public class UILoginComponent: Component
  17. {
  18. private GameObject account;
  19. private GameObject loginBtn;
  20. public void Awake()
  21. {
  22. ReferenceCollector rc = this.GetParent<UI>().GameObject.GetComponent<ReferenceCollector>();
  23. loginBtn = rc.Get<GameObject>("LoginBtn");
  24. loginBtn.GetComponent<Button>().onClick.Add(OnLogin);
  25. this.account = rc.Get<GameObject>("Account");
  26. }
  27. public void OnLogin()
  28. {
  29. OnLoginAsync().Coroutine();
  30. }
  31. public async ETVoid OnLoginAsync()
  32. {
  33. try
  34. {
  35. string text = this.account.GetComponent<InputField>().text;
  36. // 创建一个ETModel层的Session
  37. ETModel.Session session = ETModel.Game.Scene.GetComponent<NetOuterComponent>().Create(GlobalConfigComponent.Instance.GlobalProto.Address);
  38. // 创建一个ETHotfix层的Session, ETHotfix的Session会通过ETModel层的Session发送消息
  39. Session realmSession = ComponentFactory.Create<Session, ETModel.Session>(session);
  40. R2C_Login r2CLogin = (R2C_Login) await realmSession.Call(new C2R_Login() { Account = text, Password = "111111" });
  41. realmSession.Dispose();
  42. // 创建一个ETModel层的Session,并且保存到ETModel.SessionComponent中
  43. ETModel.Session gateSession = ETModel.Game.Scene.GetComponent<NetOuterComponent>().Create(r2CLogin.Address);
  44. ETModel.Game.Scene.AddComponent<ETModel.SessionComponent>().Session = gateSession;
  45. // 创建一个ETHotfix层的Session, 并且保存到ETHotfix.SessionComponent中
  46. Game.Scene.AddComponent<SessionComponent>().Session = ComponentFactory.Create<Session, ETModel.Session>(gateSession);
  47. G2C_LoginGate g2CLoginGate = (G2C_LoginGate)await SessionComponent.Instance.Session.Call(new C2G_LoginGate() { Key = r2CLogin.Key });
  48. Log.Info("登陆gate成功!");
  49. // 创建Player
  50. Player player = ETModel.ComponentFactory.CreateWithId<Player>(g2CLoginGate.PlayerId);
  51. PlayerComponent playerComponent = ETModel.Game.Scene.GetComponent<PlayerComponent>();
  52. playerComponent.MyPlayer = player;
  53. Game.Scene.GetComponent<UIComponent>().Create(UIType.UILobby);
  54. Game.Scene.GetComponent<UIComponent>().Remove(UIType.UILogin);
  55. // 测试消息有成员是class类型
  56. G2C_PlayerInfo g2CPlayerInfo = (G2C_PlayerInfo) await SessionComponent.Instance.Session.Call(new C2G_PlayerInfo());
  57. }
  58. catch (Exception e)
  59. {
  60. Log.Error(e);
  61. }
  62. }
  63. }
  64. }