UnreferenceDisposable made slimmer (#627)
This commit is contained in:
parent
f53e0d2132
commit
bd5aef6020
1 changed files with 5 additions and 3 deletions
|
|
@ -25,13 +25,15 @@ internal sealed class HttpMcpSession<TTransport>(
|
||||||
public bool IsActive => !SessionClosed.IsCancellationRequested && _referenceCount > 0;
|
public bool IsActive => !SessionClosed.IsCancellationRequested && _referenceCount > 0;
|
||||||
public long LastActivityTicks { get; private set; } = timeProvider.GetTimestamp();
|
public long LastActivityTicks { get; private set; } = timeProvider.GetTimestamp();
|
||||||
|
|
||||||
|
private TimeProvider TimeProvider => timeProvider;
|
||||||
|
|
||||||
public IMcpServer? Server { get; set; }
|
public IMcpServer? Server { get; set; }
|
||||||
public Task? ServerRunTask { get; set; }
|
public Task? ServerRunTask { get; set; }
|
||||||
|
|
||||||
public IDisposable AcquireReference()
|
public IDisposable AcquireReference()
|
||||||
{
|
{
|
||||||
Interlocked.Increment(ref _referenceCount);
|
Interlocked.Increment(ref _referenceCount);
|
||||||
return new UnreferenceDisposable(this, timeProvider);
|
return new UnreferenceDisposable(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool TryStartGetRequest() => Interlocked.Exchange(ref _getRequestStarted, 1) == 0;
|
public bool TryStartGetRequest() => Interlocked.Exchange(ref _getRequestStarted, 1) == 0;
|
||||||
|
|
@ -70,13 +72,13 @@ internal sealed class HttpMcpSession<TTransport>(
|
||||||
public bool HasSameUserId(ClaimsPrincipal user)
|
public bool HasSameUserId(ClaimsPrincipal user)
|
||||||
=> UserIdClaim == StreamableHttpHandler.GetUserIdClaim(user);
|
=> UserIdClaim == StreamableHttpHandler.GetUserIdClaim(user);
|
||||||
|
|
||||||
private sealed class UnreferenceDisposable(HttpMcpSession<TTransport> session, TimeProvider timeProvider) : IDisposable
|
private sealed class UnreferenceDisposable(HttpMcpSession<TTransport> session) : IDisposable
|
||||||
{
|
{
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (Interlocked.Decrement(ref session._referenceCount) == 0)
|
if (Interlocked.Decrement(ref session._referenceCount) == 0)
|
||||||
{
|
{
|
||||||
session.LastActivityTicks = timeProvider.GetTimestamp();
|
session.LastActivityTicks = session.TimeProvider.GetTimestamp();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue