SessionIdleCheckComponent.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. namespace ET
  2. {
  3. public class SessionIdleCheckerComponentAwakeSystem : AwakeSystem<SessionIdleCheckerComponent, int, int, int>
  4. {
  5. public override void Awake(SessionIdleCheckerComponent self, int checkInteral, int recvMaxIdleTime, int sendMaxIdleTime)
  6. {
  7. self.CheckInterval = checkInteral;
  8. self.RecvMaxIdleTime = recvMaxIdleTime;
  9. self.SendMaxIdleTime = sendMaxIdleTime;
  10. self.RepeatedTimer = TimerComponent.Instance.NewRepeatedTimer(checkInteral, self.Check);
  11. }
  12. }
  13. public class SessionIdleCheckerComponentLoadSystem : LoadSystem<SessionIdleCheckerComponent>
  14. {
  15. public override void Load(SessionIdleCheckerComponent self)
  16. {
  17. RepeatedTimer repeatedTimer = TimerComponent.Instance.GetRepeatedTimer(self.RepeatedTimer);
  18. if (repeatedTimer != null)
  19. {
  20. repeatedTimer.Callback = self.Check;
  21. }
  22. }
  23. }
  24. public class SessionIdleCheckerComponentDestroySystem : DestroySystem<SessionIdleCheckerComponent>
  25. {
  26. public override void Destroy(SessionIdleCheckerComponent self)
  27. {
  28. self.CheckInterval = 0;
  29. self.RecvMaxIdleTime = 0;
  30. self.SendMaxIdleTime = 0;
  31. TimerComponent.Instance.Remove(self.RepeatedTimer);
  32. self.RepeatedTimer = 0;
  33. }
  34. }
  35. public static class SessionIdleCheckerComponentSystem
  36. {
  37. public static void Check(this SessionIdleCheckerComponent self, bool isTimeOut)
  38. {
  39. Session session = self.GetParent<Session>();
  40. long timeNow = TimeHelper.Now();
  41. if (timeNow - session.LastRecvTime < self.RecvMaxIdleTime && timeNow - session.LastSendTime < self.SendMaxIdleTime)
  42. {
  43. return;
  44. }
  45. session.Error = ErrorCode.ERR_SessionSendOrRecvTimeout;
  46. session.Dispose();
  47. }
  48. }
  49. public class SessionIdleCheckerComponent: Entity
  50. {
  51. public int CheckInterval;
  52. public int RecvMaxIdleTime;
  53. public int SendMaxIdleTime;
  54. public long RepeatedTimer;
  55. }
  56. }