Add ILoggerFactory to StreamableHttpServerTransport (#1213)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> Co-authored-by: Stephen Toub <stoub@microsoft.com>
This commit is contained in:
parent
e47f88419c
commit
5084a79068
1 changed files with 33 additions and 6 deletions
|
|
@ -1,3 +1,5 @@
|
|||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using ModelContextProtocol.Protocol;
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
|
@ -21,7 +23,7 @@ namespace ModelContextProtocol.Server;
|
|||
/// such as when streaming completion results or providing progress updates during long-running operations.
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
public sealed class StreamableHttpServerTransport : ITransport
|
||||
public sealed partial class StreamableHttpServerTransport : ITransport
|
||||
{
|
||||
/// <summary>
|
||||
/// The stream ID used for unsolicited messages sent via the standalone GET SSE stream.
|
||||
|
|
@ -35,6 +37,7 @@ public sealed class StreamableHttpServerTransport : ITransport
|
|||
});
|
||||
private readonly CancellationTokenSource _transportDisposedCts = new();
|
||||
private readonly SemaphoreSlim _unsolicitedMessageLock = new(1, 1);
|
||||
private readonly ILogger _logger;
|
||||
|
||||
private SseEventWriter? _httpSseWriter;
|
||||
private ISseEventStreamWriter? _storeSseWriter;
|
||||
|
|
@ -42,6 +45,15 @@ public sealed class StreamableHttpServerTransport : ITransport
|
|||
private bool _getHttpRequestStarted;
|
||||
private bool _getHttpResponseCompleted;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="StreamableHttpServerTransport"/> class.
|
||||
/// </summary>
|
||||
/// <param name="loggerFactory">Optional logger factory used for logging employed by the transport.</param>
|
||||
public StreamableHttpServerTransport(ILoggerFactory? loggerFactory = null)
|
||||
{
|
||||
_logger = loggerFactory?.CreateLogger<StreamableHttpServerTransport>() ?? NullLogger<StreamableHttpServerTransport>.Instance;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public string? SessionId { get; init; }
|
||||
|
||||
|
|
@ -161,7 +173,7 @@ public sealed class StreamableHttpServerTransport : ITransport
|
|||
Throw.IfNull(message);
|
||||
Throw.IfNull(responseStream);
|
||||
|
||||
var postTransport = new StreamableHttpPostTransport(this, responseStream, _transportDisposedCts.Token);
|
||||
var postTransport = new StreamableHttpPostTransport(this, responseStream, _transportDisposedCts.Token, _logger);
|
||||
using var postCts = CancellationTokenSource.CreateLinkedTokenSource(_transportDisposedCts.Token, cancellationToken);
|
||||
await using (postTransport.ConfigureAwait(false))
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue