using System; using System.Net; namespace ET.Server { /// /// 登录验证 /// [MessageHandler(SceneType.Realm)] public class C2R_LoginHandler : AMRpcHandler { protected override async ETTask Run(Session session, C2R_Login request, R2C_Login response, Action reply) { if (session.DomainScene().SceneType != SceneType.Realm) { Log.Debug($"请求的Scene错误...SceneType={session.DomainScene().SceneType}"); session.Dispose(); return; } // 重复请求 if (session.GetComponent() != null) { response.Error = ErrorCode.ERR_RequestRepeatedly; reply(); return; } session.AddComponent(); // 随机分配一个Game StartSceneConfig config = RealmGameAddressHelper.GetGame(session.DomainZone()); Log.Debug($"Game address: {MongoHelper.ToJson(config)}"); // 向game请求一个key,客户端可以拿着这个key连接game G2R_GetLoginKey g2RGetLoginKey = (G2R_GetLoginKey) await ActorMessageSenderComponent.Instance.Call( config.InstanceId, new R2G_GetLoginKey() {Account = request.Account}); response.Address = config.InnerIPOutPort.ToString(); response.Key = g2RGetLoginKey.Key; response.GateId = g2RGetLoginKey.GateId; } } }