IceServerSessionExpireTask.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using CommonLang.Log;
  2. using CommonNetwork_ICE.Util;
  3. using CommonServer.Server;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading;
  9. namespace CommonServer_ICE.Session
  10. {
  11. /// <summary>
  12. /// 服务器端会话失效检查器
  13. /// </summary>
  14. class IceServerSessionExpireTask
  15. {
  16. static Logger log = LoggerFactory.GetLogger("IceServerSessionExpireTask");
  17. Thread thread;
  18. bool runFlag;
  19. internal IceServerSessionExpireTask()
  20. {
  21. runFlag = true;
  22. thread = new Thread(Run);
  23. }
  24. internal void Start()
  25. {
  26. thread.Start();
  27. }
  28. internal void End()
  29. {
  30. runFlag = false;
  31. thread.Join();
  32. thread.Abort();
  33. }
  34. void Run()
  35. {
  36. while (runFlag)
  37. {
  38. try
  39. {
  40. List<ISession> sessionList = SessionManager.getAllSession();
  41. DateTime currTime = DateTime.Now;
  42. foreach (ISession session in sessionList)
  43. {
  44. IceServerIoSession serverSession = (IceServerIoSession)session;
  45. // 一分钟没有数据发送和接收,关闭会话
  46. if (serverSession.LastReadTime.AddSeconds(Env.SERVER_SESSION_EXPIRE_TIME) < currTime &&
  47. serverSession.LastWriteTime.AddSeconds(Env.SERVER_SESSION_EXPIRE_TIME) < currTime)
  48. {
  49. if (serverSession.IsConnected)
  50. {
  51. log.Info("当前会话闲置,准备关闭。客户端地址IP【" + serverSession.Connector.GetConnectorConfig().RemoteIp + "】,端口【" + serverSession.Connector.GetConnectorConfig().RemotePort + "】");
  52. session.Disconnect(true);
  53. }
  54. }
  55. }
  56. Thread.Sleep(Env.SERVER_SESSION_CHECK_INTERVAL * 1000);
  57. }
  58. catch (Exception err)
  59. {
  60. log.Error(err.Message, err);
  61. }
  62. }
  63. }
  64. }
  65. }