using CommonLang.Log; using CommonNetwork_ICE.Util; using CommonServer.Server; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace CommonServer_ICE.Session { /// /// 服务器端会话失效检查器 /// class IceServerSessionExpireTask { static Logger log = LoggerFactory.GetLogger("IceServerSessionExpireTask"); Thread thread; bool runFlag; internal IceServerSessionExpireTask() { runFlag = true; thread = new Thread(Run); } internal void Start() { thread.Start(); } internal void End() { runFlag = false; thread.Join(); thread.Abort(); } void Run() { while (runFlag) { try { List sessionList = SessionManager.getAllSession(); DateTime currTime = DateTime.Now; foreach (ISession session in sessionList) { IceServerIoSession serverSession = (IceServerIoSession)session; // 一分钟没有数据发送和接收,关闭会话 if (serverSession.LastReadTime.AddSeconds(Env.SERVER_SESSION_EXPIRE_TIME) < currTime && serverSession.LastWriteTime.AddSeconds(Env.SERVER_SESSION_EXPIRE_TIME) < currTime) { if (serverSession.IsConnected) { log.Info("当前会话闲置,准备关闭。客户端地址IP【" + serverSession.Connector.GetConnectorConfig().RemoteIp + "】,端口【" + serverSession.Connector.GetConnectorConfig().RemotePort + "】"); session.Disconnect(true); } } } Thread.Sleep(Env.SERVER_SESSION_CHECK_INTERVAL * 1000); } catch (Exception err) { log.Error(err.Message, err); } } } } }