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