C2R_LoginHandler.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. using System.Net;
  3. namespace ET.Server
  4. {
  5. /// <summary>
  6. /// 登录验证
  7. /// </summary>
  8. [MessageHandler(SceneType.Realm)]
  9. public class C2R_LoginHandler : AMRpcHandler<C2R_Login, R2C_Login>
  10. {
  11. protected override async ETTask Run(Session session, C2R_Login request, R2C_Login response, Action reply)
  12. {
  13. if (session.DomainScene().SceneType != SceneType.Realm)
  14. {
  15. Log.Debug($"请求的Scene错误...SceneType={session.DomainScene().SceneType}");
  16. session.Dispose();
  17. return;
  18. }
  19. // 重复请求
  20. if (session.GetComponent<SessionLockComponent>() != null)
  21. {
  22. response.Error = ErrorCode.ERR_RequestRepeatedly;
  23. reply();
  24. return;
  25. }
  26. session.AddComponent<SessionLockComponent>();
  27. // 随机分配一个Game
  28. StartSceneConfig config = RealmGameAddressHelper.GetGame(session.DomainZone());
  29. Log.Debug($"Game address: {MongoHelper.ToJson(config)}");
  30. // 向game请求一个key,客户端可以拿着这个key连接game
  31. G2R_GetLoginKey g2RGetLoginKey = (G2R_GetLoginKey) await ActorMessageSenderComponent.Instance.Call(
  32. config.InstanceId, new R2G_GetLoginKey() {Account = request.Account});
  33. response.Address = config.InnerIPOutPort.ToString();
  34. response.Key = g2RGetLoginKey.Key;
  35. response.GateId = g2RGetLoginKey.GateId;
  36. }
  37. }
  38. }