#99 - Active user list wrong
This commit is contained in:
parent
f4f3d1255e
commit
9794c8fb1a
|
@ -25,8 +25,8 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The _active connections
|
/// The _active connections
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly List<ClientConnectionInfo> _activeConnections =
|
private readonly ConcurrentDictionary<string, ClientConnectionInfo> _activeConnections =
|
||||||
new List<ClientConnectionInfo>();
|
new ConcurrentDictionary<string, ClientConnectionInfo>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The _users
|
/// The _users
|
||||||
|
@ -69,7 +69,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||||
/// <value>All connections.</value>
|
/// <value>All connections.</value>
|
||||||
public IEnumerable<ClientConnectionInfo> AllConnections
|
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>
|
/// <summary>
|
||||||
|
@ -313,29 +313,19 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||||
/// <returns>ClientConnectionInfo.</returns>
|
/// <returns>ClientConnectionInfo.</returns>
|
||||||
private ClientConnectionInfo GetConnection(Guid userId, string clientType, string deviceId, string deviceName)
|
private ClientConnectionInfo GetConnection(Guid userId, string clientType, string deviceId, string deviceName)
|
||||||
{
|
{
|
||||||
lock (_activeConnections)
|
var key = clientType + deviceId;
|
||||||
|
|
||||||
|
var connection = _activeConnections.GetOrAdd(key, keyName => new ClientConnectionInfo
|
||||||
{
|
{
|
||||||
var conn = _activeConnections.FirstOrDefault(c => string.Equals(c.Client, clientType, StringComparison.OrdinalIgnoreCase) && string.Equals(deviceId, c.DeviceId));
|
UserId = userId,
|
||||||
|
Client = clientType,
|
||||||
|
DeviceName = deviceName,
|
||||||
|
DeviceId = deviceId
|
||||||
|
});
|
||||||
|
|
||||||
if (conn == null)
|
connection.UserId = userId;
|
||||||
{
|
|
||||||
conn = new ClientConnectionInfo
|
return connection;
|
||||||
{
|
|
||||||
UserId = userId,
|
|
||||||
Client = clientType,
|
|
||||||
DeviceName = deviceName,
|
|
||||||
DeviceId = deviceId
|
|
||||||
};
|
|
||||||
|
|
||||||
_activeConnections.Add(conn);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
conn.UserId = userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
return conn;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -33,6 +33,18 @@ namespace MediaBrowser.Server.Implementations.Sqlite
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a value indicating whether [enable delayed commands].
|
||||||
|
/// </summary>
|
||||||
|
/// <value><c>true</c> if [enable delayed commands]; otherwise, <c>false</c>.</value>
|
||||||
|
protected override bool EnableDelayedCommands
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The _protobuf serializer
|
/// The _protobuf serializer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -43,6 +43,18 @@ namespace MediaBrowser.Server.Implementations.Sqlite
|
||||||
/// <value>The logger.</value>
|
/// <value>The logger.</value>
|
||||||
protected ILogger Logger { get; private set; }
|
protected ILogger Logger { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a value indicating whether [enable delayed commands].
|
||||||
|
/// </summary>
|
||||||
|
/// <value><c>true</c> if [enable delayed commands]; otherwise, <c>false</c>.</value>
|
||||||
|
protected virtual bool EnableDelayedCommands
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="SqliteRepository" /> class.
|
/// Initializes a new instance of the <see cref="SqliteRepository" /> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -85,8 +97,11 @@ namespace MediaBrowser.Server.Implementations.Sqlite
|
||||||
|
|
||||||
await connection.OpenAsync().ConfigureAwait(false);
|
await connection.OpenAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
// Run once
|
if (EnableDelayedCommands)
|
||||||
FlushTimer = new Timer(Flush, null, TimeSpan.FromMilliseconds(FlushInterval), TimeSpan.FromMilliseconds(-1));
|
{
|
||||||
|
// Run once
|
||||||
|
FlushTimer = new Timer(Flush, null, TimeSpan.FromMilliseconds(FlushInterval), TimeSpan.FromMilliseconds(-1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -147,16 +162,9 @@ namespace MediaBrowser.Server.Implementations.Sqlite
|
||||||
{
|
{
|
||||||
if (connection != null)
|
if (connection != null)
|
||||||
{
|
{
|
||||||
// If we're not already flushing, do it now
|
if (EnableDelayedCommands)
|
||||||
if (!IsFlushing)
|
|
||||||
{
|
{
|
||||||
Flush(null);
|
FlushOnDispose();
|
||||||
}
|
|
||||||
|
|
||||||
// Don't dispose in the middle of a flush
|
|
||||||
while (IsFlushing)
|
|
||||||
{
|
|
||||||
Thread.Sleep(25);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connection.IsOpen())
|
if (connection.IsOpen())
|
||||||
|
@ -181,6 +189,24 @@ namespace MediaBrowser.Server.Implementations.Sqlite
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Flushes the on dispose.
|
||||||
|
/// </summary>
|
||||||
|
private void FlushOnDispose()
|
||||||
|
{
|
||||||
|
// If we're not already flushing, do it now
|
||||||
|
if (!IsFlushing)
|
||||||
|
{
|
||||||
|
Flush(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't dispose in the middle of a flush
|
||||||
|
while (IsFlushing)
|
||||||
|
{
|
||||||
|
Thread.Sleep(25);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Queues the command.
|
/// Queues the command.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user