SessionIdleCheckerComponentSystem.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. namespace ET
  2. {
  3. [ObjectSystem]
  4. public class SessionIdleCheckerComponentAwakeSystem: AwakeSystem<SessionIdleCheckerComponent, int>
  5. {
  6. public override void Awake(SessionIdleCheckerComponent self, int checkInteral)
  7. {
  8. self.RepeatedTimer = TimerComponent.Instance.NewRepeatedTimer(checkInteral, () => { self.Check(); });
  9. }
  10. }
  11. [ObjectSystem]
  12. public class SessionIdleCheckerComponentDestroySystem: DestroySystem<SessionIdleCheckerComponent>
  13. {
  14. public override void Destroy(SessionIdleCheckerComponent self)
  15. {
  16. TimerComponent.Instance.Remove(ref self.RepeatedTimer);
  17. }
  18. }
  19. public static class SessionIdleCheckerComponentSystem
  20. {
  21. public static void Check(this SessionIdleCheckerComponent self)
  22. {
  23. Session session = self.GetParent<Session>();
  24. long timeNow = TimeHelper.ClientNow();
  25. if (timeNow - session.LastRecvTime < 30 * 1000 && timeNow - session.LastSendTime < 30 * 1000)
  26. {
  27. return;
  28. }
  29. Log.Info(
  30. $"session timeout: {session.Id} {timeNow} {session.LastRecvTime} {session.LastSendTime} {timeNow - session.LastRecvTime} {timeNow - session.LastSendTime}");
  31. session.Error = ErrorCore.ERR_SessionSendOrRecvTimeout;
  32. session.Dispose();
  33. }
  34. }
  35. }