Esempio n. 1
0
                /// <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());
                }
Esempio n. 2
0
                /// <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();
                }
Esempio n. 3
0
 /// <summary>
 /// 新建会话标识
 /// </summary>
 /// <param name="timeout"></param>
 /// <returns></returns>
 public sessionId New(DateTime timeout)
 {
     SessionId.New();
     Timeout = timeout;
     return(SessionId);
 }