diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-05 16:49:14 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-05 16:49:14 -0400 |
| commit | 9794c8fb1adc01823a9bdd469b470390fee0ebcd (patch) | |
| tree | b2780708fdb202bd6c501687c79429d0670407a5 /MediaBrowser.Server.Implementations/Library/UserManager.cs | |
| parent | f4f3d1255e34bced614e125dc8d8b05c29e41ead (diff) | |
#99 - Active user list wrong
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/UserManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Library/UserManager.cs | 38 |
1 files changed, 14 insertions, 24 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/UserManager.cs b/MediaBrowser.Server.Implementations/Library/UserManager.cs index 682ec9a8c..9293d8199 100644 --- a/MediaBrowser.Server.Implementations/Library/UserManager.cs +++ b/MediaBrowser.Server.Implementations/Library/UserManager.cs @@ -25,8 +25,8 @@ namespace MediaBrowser.Server.Implementations.Library /// <summary> /// The _active connections /// </summary> - private readonly List<ClientConnectionInfo> _activeConnections = - new List<ClientConnectionInfo>(); + private readonly ConcurrentDictionary<string, ClientConnectionInfo> _activeConnections = + new ConcurrentDictionary<string, ClientConnectionInfo>(StringComparer.OrdinalIgnoreCase); /// <summary> /// The _users @@ -69,7 +69,7 @@ namespace MediaBrowser.Server.Implementations.Library /// <value>All connections.</value> public IEnumerable<ClientConnectionInfo> AllConnections { - get { return _activeConnections.Where(c => GetUserById(c.UserId) != null).OrderByDescending(c => c.LastActivityDate); } + get { return _activeConnections.Values.OrderByDescending(c => c.LastActivityDate); } } /// <summary> @@ -313,29 +313,19 @@ namespace MediaBrowser.Server.Implementations.Library /// <returns>ClientConnectionInfo.</returns> private ClientConnectionInfo GetConnection(Guid userId, string clientType, string deviceId, string deviceName) { - lock (_activeConnections) - { - var conn = _activeConnections.FirstOrDefault(c => string.Equals(c.Client, clientType, StringComparison.OrdinalIgnoreCase) && string.Equals(deviceId, c.DeviceId)); + var key = clientType + deviceId; - if (conn == null) - { - conn = new ClientConnectionInfo - { - UserId = userId, - Client = clientType, - DeviceName = deviceName, - DeviceId = deviceId - }; - - _activeConnections.Add(conn); - } - else - { - conn.UserId = userId; - } + var connection = _activeConnections.GetOrAdd(key, keyName => new ClientConnectionInfo + { + UserId = userId, + Client = clientType, + DeviceName = deviceName, + DeviceId = deviceId + }); - return conn; - } + connection.UserId = userId; + + return connection; } /// <summary> |
