/// <summary> /// 构造会话管理器 /// </summary> /// <param name="context"></param> /// <param name="bufferSize"></param> /// <param name="count"></param> /// <param name="completed"></param> public SessionManager(IContext context, int bufferSize, int count, EventHandler <SocketAsyncEventArgs> completed, TimeSpan timeOut) { _userTokenPool = new UserTokenPool(context, count); _session = new OuterMemoryCacheHelper <IUserToken>(); _timeOut = timeOut; _bufferSize = bufferSize; _completed = completed; _bufferManager = new BufferManager(bufferSize * count, bufferSize); _bufferManager.InitBuffer(); _argsPool = new SocketAsyncEventArgsPool(count * 2); _argsPool.InitPool(_completed); //超时处理 timeout handler ThreadHelper.PulseAction(() => { var values = _session.List.Where(b => b.Expired < DateTimeHelper.Now); if (values != null) { foreach (var val in values) { if (val != null) { OnTimeOut?.Invoke(val.Value); } } } }, new TimeSpan(0, 0, 10), false); }