SessionIdleCheckComponent.cs 2.2 KB

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