using FastGithub.FlowAnalyze;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.Extensions.DependencyInjection;
namespace FastGithub
{
///
/// ListenOptions扩展
///
public static class ListenOptionsExtensions
{
///
/// 使用流量分析中间件
///
///
///
public static ListenOptions UseFlowAnalyze(this ListenOptions listen)
{
var flowAnalyzer = listen.ApplicationServices.GetRequiredService();
listen.Use(next => async context =>
{
var oldTransport = context.Transport;
try
{
await using var loggingDuplexPipe = new FlowAnalyzeDuplexPipe(context.Transport, flowAnalyzer);
context.Transport = loggingDuplexPipe;
await next(context);
}
finally
{
context.Transport = oldTransport;
}
});
return listen;
}
}
}