You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.7 KiB

using System;
namespace ET
{
[FriendClass(typeof(SessionPlayerComponent))]
public class L2G_DisconnectGateUnitHandler : AMActorRpcHandler<Scene, L2G_DisconnectGateUnit, G2L_DisconnectGateUnit>
{
protected override async ETTask Run(Scene scene, L2G_DisconnectGateUnit request, G2L_DisconnectGateUnit response, Action reply)
{
long accountId = request.AccountId;
using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.LoginGate, accountId.GetHashCode()))
{
PlayerComponent playerComponent = scene.GetComponent<PlayerComponent>();
Player player = playerComponent.Get(accountId);
if (player == null)
{
reply();
return;
}
scene.GetComponent<GateSessionKeyComponent>().Remove(accountId);
Session gateSession = Game.EventSystem.Get(player.SessionInstanceId) as Session;
if (gateSession != null && !gateSession.IsDisposed)
{
var sessionPlayerComp = gateSession.GetComponent<SessionPlayerComponent>();
if (sessionPlayerComp != null)
{
sessionPlayerComp.IsLoginAgain = true;
}
gateSession.Send(new A2C_Disconnect() { Error = ErrorCode.ERR_OtherAccountLogin});
gateSession?.Disconnect().Coroutine();
}
player.SessionInstanceId = 0;
player.AddComponent<PlayerOfflineOutTimeComponent>();
}
reply();
}
}
}