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;
}
}
}