using System; using Newtonsoft.Json.Linq; namespace ET.Server { /// /// 登入游戏服.获取角色列表 /// [MessageHandler(SceneType.Game)] public class C2G_LoginGameHandler : AMRpcHandler { protected override async ETTask Run(Session session, C2G_LoginGame request, G2C_LoginGame response, Action reply) { if (session.DomainScene().SceneType != SceneType.Game) { Log.Error($"Game 请求的Scene错误...SceneType={session.DomainScene().SceneType}"); session.Dispose(); return; } // 移除session自动超时组件 session.RemoveComponent(); Scene scene = session.DomainScene(); bool tokenIsNull = string.IsNullOrEmpty(request.Token.Trim()); // 预先创建数据 PlayerInfo playerInfo = new PlayerInfo(); playerInfo.Id = IdGenerater.Instance.GenerateUnitId(scene.DomainZone()); GameDouyinComponent douyinComponent = Root.Instance.Scene.GetComponent(); if (tokenIsNull) { // Token为空初始化信息 playerInfo.RoomId = playerInfo.Id; playerInfo.AnchorOpenId = playerInfo.Id.ToString(); playerInfo.AvatarUrl = ""; playerInfo.Name = "主播-" + playerInfo.Id; if (douyinComponent == null) { Root.Instance.Scene.AddComponent(true); } } else { if (douyinComponent == null) { douyinComponent = Root.Instance.Scene.AddComponent(false); douyinComponent.InitAccessToken(); } JObject roomInfo = douyinComponent.GetRoomInfo(request.Token.Trim()); if (roomInfo == null) { Log.Error($"获取抖音roomInfo失败..."); response.Error = ErrorCode.ERR_RoomInfoError; reply(); return; } JToken info = roomInfo.SelectToken("data").SelectToken("info"); playerInfo.RoomId = Convert.ToInt64(info.SelectToken("room_id")); playerInfo.AnchorOpenId = Convert.ToString(info.SelectToken("anchor_open_id")); playerInfo.AvatarUrl = Convert.ToString(info.SelectToken("avatar_url")); playerInfo.Name = Convert.ToString(info.SelectToken("nick_name")); } playerInfo.Sex = 0; playerInfo.Pro = (int)PlayerProType.CANG_LANG; playerInfo.Level = 1; playerInfo.Exp = 0; // 添加session组件,用于绑定角色 session.AddComponent(playerInfo); session.AddComponent(MailboxType.GateSession); response.Player = PlayerHelper.PlayerInfoToPlayerBasicProto(playerInfo); reply(); await ETTask.CompletedTask; } } }