/// <summary> /// 添加用户长连接轮询验证 /// </summary> /// <param name="userId"></param> /// <returns></returns> public string Add(int userId) { sessionTimeout value; if (!sessions.TryGetValue(userId, out value)) { sessionId sessionId = default(sessionId); sessionId.New(); Monitor.Enter(sessionLock); try { if (!sessions.ContainsKey(userId)) { sessions.Add(userId, value = new sessionTimeout { SessionId = sessionId, Timeout = date.NowSecond.AddTicks(timeoutTicks) }); } } finally { Monitor.Exit(sessionLock); } } return(value.SessionId.ToHexString()); }
/// <summary> /// 获取用户长连接轮询验证 /// </summary> /// <param name="userId">用户标识</param> /// <param name="sessionId">长连接轮询验证,0表示失败</param> public void Get(int userId, ref sessionId sessionId) { sessionTimeout value; if (sessions.TryGetValue(userId, out value)) { if (value.Timeout > date.NowSecond) { sessionId = value.SessionId; return; } sessionId.New(); Monitor.Enter(sessionLock); try { sessions[userId] = new sessionTimeout { SessionId = sessionId, Timeout = date.NowSecond.AddTicks(timeoutTicks) }; } finally { Monitor.Exit(sessionLock); } return; } sessionId.Null(); }
/// <summary> /// 新建会话标识 /// </summary> /// <param name="timeout"></param> /// <returns></returns> public sessionId New(DateTime timeout) { SessionId.New(); Timeout = timeout; return(SessionId); }