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);
}
}
}
}
}