mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
73 lines
3.1 KiB
C#
73 lines
3.1 KiB
C#
using System;
|
|
|
|
|
|
namespace ET.Server
|
|
{
|
|
[MessageHandler(SceneType.Gate)]
|
|
public class C2G_LoginGateHandler : MessageHandler<C2G_LoginGate, G2C_LoginGate>
|
|
{
|
|
protected override async ETTask Run(Session session, C2G_LoginGate request, G2C_LoginGate response)
|
|
{
|
|
Scene root = session.Root();
|
|
string account = root.GetComponent<GateSessionKeyComponent>().Get(request.Key);
|
|
if (account == null)
|
|
{
|
|
response.Error = ErrorCore.ERR_ConnectGateKeyError;
|
|
response.Message = "Gate key验证失败!";
|
|
return;
|
|
}
|
|
|
|
session.RemoveComponent<SessionAcceptTimeoutComponent>();
|
|
|
|
PlayerComponent playerComponent = root.GetComponent<PlayerComponent>();
|
|
Player player = playerComponent.GetByAccount(account);
|
|
if (player == null)
|
|
{
|
|
player = playerComponent.AddChild<Player, string>(account);
|
|
playerComponent.Add(player);
|
|
PlayerSessionComponent playerSessionComponent = player.AddComponent<PlayerSessionComponent>();
|
|
playerSessionComponent.AddComponent<MailBoxComponent, MailBoxType>(MailBoxType.GateSession);
|
|
await playerSessionComponent.AddLocation(LocationType.GateSession);
|
|
|
|
player.AddComponent<MailBoxComponent, MailBoxType>(MailBoxType.UnOrderedMessage);
|
|
await player.AddLocation(LocationType.Player);
|
|
|
|
session.AddComponent<SessionPlayerComponent>().Player = player;
|
|
playerSessionComponent.Session = session;
|
|
}
|
|
else
|
|
{
|
|
// 判断是否在战斗
|
|
PlayerRoomComponent playerRoomComponent = player.GetComponent<PlayerRoomComponent>();
|
|
if (playerRoomComponent.RoomActorId != default)
|
|
{
|
|
CheckRoom(player, session).Coroutine();
|
|
}
|
|
else
|
|
{
|
|
PlayerSessionComponent playerSessionComponent = player.GetComponent<PlayerSessionComponent>();
|
|
playerSessionComponent.Session = session;
|
|
}
|
|
}
|
|
|
|
response.PlayerId = player.Id;
|
|
await ETTask.CompletedTask;
|
|
}
|
|
|
|
private static async ETTask CheckRoom(Player player, Session session)
|
|
{
|
|
Fiber fiber = player.Fiber();
|
|
await fiber.WaitFrameFinish();
|
|
|
|
using Room2G_Reconnect room2GateReconnect = await fiber.Root.GetComponent<ActorSenderComponent>().Call(
|
|
player.GetComponent<PlayerRoomComponent>().RoomActorId,
|
|
new G2Room_Reconnect() { PlayerId = player.Id }) as Room2G_Reconnect;
|
|
G2C_Reconnect g2CReconnect = new() { StartTime = room2GateReconnect.StartTime, Frame = room2GateReconnect.Frame };
|
|
g2CReconnect.UnitInfos.AddRange(room2GateReconnect.UnitInfos);
|
|
session.Send(g2CReconnect);
|
|
|
|
session.AddComponent<SessionPlayerComponent>().Player = player;
|
|
player.GetComponent<PlayerSessionComponent>().Session = session;
|
|
}
|
|
}
|
|
} |