HeartBeatComponentSystem.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. namespace ET.Server
  2. {
  3. [FriendOf(typeof (HeartBeatComponent))]
  4. public static class HeartBeatComponentSystem
  5. {
  6. public class HeartBeatComponentAwakeSystem: AwakeSystem<HeartBeatComponent, Session>
  7. {
  8. protected override void Awake(HeartBeatComponent self, Session session)
  9. {
  10. // 初始化
  11. self.Session = session;
  12. self.UpdateInterval = 5;
  13. self.OutInterval = 3;
  14. self.RecordDeltaTime = 0;
  15. self.CurrentTime = 0;
  16. }
  17. }
  18. public class HeartBeatComponentUpdateSystem: UpdateSystem<HeartBeatComponent>
  19. {
  20. protected override void Update(HeartBeatComponent self)
  21. {
  22. // 如果没有到达发包时间、直接返回
  23. if (!((TimeHelper.ClientNowSeconds() - self.RecordDeltaTime) > self.UpdateInterval) || self.CurrentTime == 0)
  24. {
  25. return;
  26. }
  27. // 记录当前时间
  28. self.RecordDeltaTime = TimeHelper.ClientNowSeconds();
  29. // 移除Session
  30. if (TimeHelper.ClientNowSeconds() - self.CurrentTime <= self.OutInterval)
  31. {
  32. return;
  33. }
  34. Log.Debug($"移除Session Parent.Id = {self.Parent.Id}");
  35. self.Session.Disconnect().Coroutine();
  36. }
  37. }
  38. }
  39. }