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(); } }
public List <UserDetails> GetUsers() { try { GroupLock.EnterReadLock(); return(Users.Values.ToList()); } finally { GroupLock.ExitReadLock(); } }
public bool RemoveUser(UserDetails user) { try { GroupLock.EnterWriteLock(); if (IsOwner(user)) { Owner = null; } return(Users.Remove(user.ConnectionId)); } finally { GroupLock.ExitWriteLock(); } }
public bool TryGetUser(string connectionid, out UserDetails userdetails) { try { GroupLock.EnterReadLock(); if (Users.TryGetValue(connectionid, out userdetails)) { return(true); } return(false); } finally { GroupLock.ExitReadLock(); } }
public void ClearCodeAndRatings() { try { GroupLock.EnterReadLock(); foreach (var userdetail in Users.Values) { userdetail.Code = ""; userdetail.Rating = Single.MaxValue; userdetail.Attempts = 0; } } finally { GroupLock.ExitReadLock(); } }