C2G_LoginGameHandler.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System;
  2. using Newtonsoft.Json.Linq;
  3. namespace ET.Server
  4. {
  5. /// <summary>
  6. /// 登入游戏服.获取角色列表
  7. /// </summary>
  8. [MessageHandler(SceneType.Game)]
  9. public class C2G_LoginGameHandler : AMRpcHandler<C2G_LoginGame, G2C_LoginGame>
  10. {
  11. protected override async ETTask Run(Session session, C2G_LoginGame request, G2C_LoginGame response, Action reply)
  12. {
  13. if (session.DomainScene().SceneType != SceneType.Game)
  14. {
  15. Log.Error($"Game 请求的Scene错误...SceneType={session.DomainScene().SceneType}");
  16. session.Dispose();
  17. return;
  18. }
  19. // 移除session自动超时组件
  20. session.RemoveComponent<SessionAcceptTimeoutComponent>();
  21. Scene scene = session.DomainScene();
  22. bool tokenIsNull = string.IsNullOrEmpty(request.Token.Trim());
  23. // 预先创建数据
  24. PlayerInfo playerInfo = new PlayerInfo();
  25. playerInfo.Id = IdGenerater.Instance.GenerateUnitId(scene.DomainZone());
  26. GameDouyinComponent douyinComponent = Root.Instance.Scene.GetComponent<GameDouyinComponent>();
  27. if (tokenIsNull)
  28. {
  29. // Token为空初始化信息
  30. playerInfo.RoomId = playerInfo.Id;
  31. playerInfo.AnchorOpenId = playerInfo.Id.ToString();
  32. playerInfo.AvatarUrl = "";
  33. playerInfo.Name = "主播-" + playerInfo.Id;
  34. if (douyinComponent == null)
  35. {
  36. Root.Instance.Scene.AddComponent<GameDouyinComponent, bool>(true);
  37. }
  38. }
  39. else
  40. {
  41. if (douyinComponent == null)
  42. {
  43. douyinComponent = Root.Instance.Scene.AddComponent<GameDouyinComponent, bool>(false);
  44. douyinComponent.InitAccessToken();
  45. }
  46. JObject roomInfo = douyinComponent.GetRoomInfo(request.Token.Trim());
  47. if (roomInfo == null)
  48. {
  49. Log.Error($"获取抖音roomInfo失败...");
  50. response.Error = ErrorCode.ERR_RoomInfoError;
  51. reply();
  52. return;
  53. }
  54. JToken info = roomInfo.SelectToken("data").SelectToken("info");
  55. playerInfo.RoomId = Convert.ToInt64(info.SelectToken("room_id"));
  56. playerInfo.AnchorOpenId = Convert.ToString(info.SelectToken("anchor_open_id"));
  57. playerInfo.AvatarUrl = Convert.ToString(info.SelectToken("avatar_url"));
  58. playerInfo.Name = Convert.ToString(info.SelectToken("nick_name"));
  59. }
  60. playerInfo.Sex = 0;
  61. playerInfo.Pro = (int)PlayerProType.CANG_LANG;
  62. playerInfo.Level = 1;
  63. playerInfo.Exp = 0;
  64. // 添加session组件,用于绑定角色
  65. session.AddComponent<SessionPlayerComponent, PlayerInfo>(playerInfo);
  66. session.AddComponent<MailBoxComponent, MailboxType>(MailboxType.GateSession);
  67. response.Player = PlayerHelper.PlayerInfoToPlayerBasicProto(playerInfo);
  68. reply();
  69. await ETTask.CompletedTask;
  70. }
  71. }
  72. }