C2G_LoginGameHandler.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. namespace ET.Server
  3. {
  4. /// <summary>
  5. /// 登入游戏服, 获取角色基础信息
  6. /// </summary>
  7. [MessageHandler(SceneType.Game)]
  8. public class C2G_LoginGameHandler : AMRpcHandler<C2G_LoginGame, G2C_LoginGame>
  9. {
  10. protected override async ETTask Run(Session session, C2G_LoginGame request, G2C_LoginGame response, Action reply)
  11. {
  12. if (session.DomainScene().SceneType != SceneType.Game)
  13. {
  14. Log.Error($"Game 请求的Scene错误...SceneType={session.DomainScene().SceneType}");
  15. session.Dispose();
  16. return;
  17. }
  18. // 重复请求
  19. if (session.GetComponent<SessionLockComponent>() != null)
  20. {
  21. response.Error = ErrorCode.ERR_RequestRepeatedly;
  22. reply();
  23. return;
  24. }
  25. Scene scene = session.DomainScene();
  26. string account = scene.GetComponent<GameSessionKeyComponent>().Get(request.Key);
  27. if (account == null)
  28. {
  29. response.Error = ErrorCore.ERR_ConnectGateKeyError;
  30. response.Message = "Game key验证失败!";
  31. reply();
  32. return;
  33. }
  34. // 移除session自动超时组件
  35. session.RemoveComponent<SessionAcceptTimeoutComponent>();
  36. PlayerComponent playerComponent = scene.GetComponent<PlayerComponent>();
  37. Player player = playerComponent.AddChild<Player, string>(account);
  38. playerComponent.Add(player);
  39. session.AddComponent<SessionPlayerComponent>().PlayerId = player.Id;
  40. session.AddComponent<MailBoxComponent, MailboxType>(MailboxType.GateSession);
  41. response.PlayerId = player.Id;
  42. reply();
  43. await ETTask.CompletedTask;
  44. }
  45. }
  46. }