Пример #1
0
            public UserDetails GetOrCreateUser(string username, string connectionid)
            {
                try
                {
                    GroupLock.EnterUpgradeableReadLock();
                    UserDetails userdetails = null;
                    if (!Users.TryGetValue(connectionid, out userdetails))
                    {
                        try
                        {
                            GroupLock.EnterWriteLock();
                            if (!Users.TryGetValue(connectionid, out userdetails))
                            {
                                userdetails = new UserDetails()
                                {
                                    ConnectionId = connectionid, Code = "", UserName = username, Rating = Single.MaxValue
                                };
                                TryElevateUserToOwner(userdetails);
                                Users.Add(connectionid, userdetails);
                            }
                        }
                        finally
                        {
                            GroupLock.ExitWriteLock();
                        }
                    }

                    return(userdetails);
                }
                finally
                {
                    GroupLock.ExitUpgradeableReadLock();
                }
            }
Пример #2
0
 public List <UserDetails> GetUsers()
 {
     try
     {
         GroupLock.EnterReadLock();
         return(Users.Values.ToList());
     }
     finally
     {
         GroupLock.ExitReadLock();
     }
 }
Пример #3
0
 public bool RemoveUser(UserDetails user)
 {
     try
     {
         GroupLock.EnterWriteLock();
         if (IsOwner(user))
         {
             Owner = null;
         }
         return(Users.Remove(user.ConnectionId));
     }
     finally
     {
         GroupLock.ExitWriteLock();
     }
 }
Пример #4
0
 public bool TryGetUser(string connectionid, out UserDetails userdetails)
 {
     try
     {
         GroupLock.EnterReadLock();
         if (Users.TryGetValue(connectionid, out userdetails))
         {
             return(true);
         }
         return(false);
     }
     finally
     {
         GroupLock.ExitReadLock();
     }
 }
Пример #5
0
 public void ClearCodeAndRatings()
 {
     try
     {
         GroupLock.EnterReadLock();
         foreach (var userdetail in Users.Values)
         {
             userdetail.Code     = "";
             userdetail.Rating   = Single.MaxValue;
             userdetail.Attempts = 0;
         }
     }
     finally
     {
         GroupLock.ExitReadLock();
     }
 }