C2R_LoginHandler.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text.RegularExpressions;
  4. namespace ET.Server
  5. {
  6. /// <summary>
  7. /// 登陆验证
  8. /// </summary>
  9. [MessageHandler(SceneType.Realm)]
  10. public class C2R_LoginHandler: AMRpcHandler<C2R_Login, R2C_Login>
  11. {
  12. protected override async ETTask Run(Session session, C2R_Login request, R2C_Login response, Action reply)
  13. {
  14. if (session.DomainScene().SceneType != SceneType.Realm)
  15. {
  16. Log.Debug($"请求的Scene错误...SceneType={session.DomainScene().SceneType}");
  17. session.Dispose();
  18. return;
  19. }
  20. // 重复请求
  21. if (session.GetComponent<SessionLockComponent>() != null)
  22. {
  23. response.Error = ErrorCode.ERR_RequestRepeatedly;
  24. reply();
  25. return;
  26. }
  27. session.AddComponent<SessionLockComponent>();
  28. // todo 生成token, 后期改成正式token
  29. // string token = request.RoomId;
  30. // todo 服务器列表,暂定根据cpu负载做负载均衡
  31. List<StartSceneConfig> gameList = RealmGateAddressHelper.GetAllGame(session.DomainZone());
  32. if (gameList is { Count: > 0 })
  33. {
  34. response.Address = new List<string>();
  35. foreach (StartSceneConfig config in gameList)
  36. {
  37. response.Address.Add(config.OuterIPPort.ToString());
  38. }
  39. }
  40. reply();
  41. await ETTask.CompletedTask;
  42. }
  43. }
  44. }