using System; using System.Collections.Generic; 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; } if (string.IsNullOrEmpty(request.Key)) { response.Error = ErrorCore.ERR_ConnectGateKeyError; response.Message = "Game key验证失败!"; reply(); return; } Scene scene = session.DomainScene(); string account = scene.GetComponent().Get(request.Key); if (account == null) { response.Error = ErrorCore.ERR_ConnectGateKeyError; response.Message = "Game key验证失败!"; reply(); return; } string[] str = request.Key.Split(","); if (str.Length != 2) { response.Error = ErrorCore.ERR_ConnectGateKeyError; response.Message = "Game key验证失败!"; reply(); return; } int channel = int.Parse(str[1]); if (channel <= 0) { response.Error = ErrorCore.ERR_ConnectGateKeyError; response.Message = "Game key验证失败,渠道号错误"; reply(); return; } // 移除session自动超时组件 session.RemoveComponent(); Player player = scene.GetComponent().AddChild(session); player.Channel = channel; player.Name = "玩家" + player.Id; player.Diamond = 1000; // 添加session组件,用于绑定角色 session.AddComponent().PlayerId = player.Id; session.AddComponent(MailboxType.GameSession); response.RoomId = player.RoomId; response.Player = ProtoHelper.PlayerToProto(player); // 玩法列表 response.GameplayList = new List(); switch (channel) { case 10000: // 10000:测试渠道 全渠道 response.GameplayList.Add((int)RoomType.HGHH); response.GameplayList.Add((int)RoomType.EzhouMahjong); break; case 10001: // 10001:黄冈 response.GameplayList.Add((int)RoomType.HGHH); break; case 10002: // 10002:鄂州 response.GameplayList.Add((int)RoomType.EzhouMahjong); break; } reply(); await ETTask.CompletedTask; } } }