mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
[+] 接入ET8服务端
[+] 接入ET8服务端
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user