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,55 @@
|
||||
using System;
|
||||
|
||||
namespace ET
|
||||
{
|
||||
[EntitySystemOf(typeof(SessionIdleCheckerComponent))]
|
||||
[FriendOf(typeof(SessionIdleCheckerComponent))]
|
||||
public static partial class SessionIdleCheckerComponentSystem
|
||||
{
|
||||
[Invoke(TimerInvokeType.SessionIdleChecker)]
|
||||
public class SessionIdleChecker: ATimer<SessionIdleCheckerComponent>
|
||||
{
|
||||
protected override void Run(SessionIdleCheckerComponent self)
|
||||
{
|
||||
try
|
||||
{
|
||||
self.Check();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Error($"session idle checker timer error: {self.Id}\n{e}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[EntitySystem]
|
||||
private static void Awake(this SessionIdleCheckerComponent self)
|
||||
{
|
||||
self.RepeatedTimer = self.Fiber().TimerComponent.NewRepeatedTimer(CheckInteral, TimerInvokeType.SessionIdleChecker, self);
|
||||
}
|
||||
|
||||
[EntitySystem]
|
||||
private static void Destroy(this SessionIdleCheckerComponent self)
|
||||
{
|
||||
self.Fiber().TimerComponent?.Remove(ref self.RepeatedTimer);
|
||||
}
|
||||
|
||||
public const int CheckInteral = 2000;
|
||||
|
||||
private static void Check(this SessionIdleCheckerComponent self)
|
||||
{
|
||||
Session session = self.GetParent<Session>();
|
||||
long timeNow = self.Fiber().TimeInfo.ClientNow();
|
||||
|
||||
if (timeNow - session.LastRecvTime < ConstValue.SessionTimeoutTime && timeNow - session.LastSendTime < ConstValue.SessionTimeoutTime)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Log.Info($"session timeout: {session.Id} {timeNow} {session.LastRecvTime} {session.LastSendTime} {timeNow - session.LastRecvTime} {timeNow - session.LastSendTime}");
|
||||
session.Error = ErrorCore.ERR_SessionSendOrRecvTimeout;
|
||||
|
||||
session.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user