public Task InvokeAsync(HttpContext context) { if (WebSocketsTelemetry.Log.IsEnabled()) { if (context.Features.Get <IHttpUpgradeFeature>() is { IsUpgradableRequest : true } upgradeFeature) { var upgradeWrapper = new HttpUpgradeFeatureWrapper(_clock, context, upgradeFeature); return(InvokeAsyncCore(upgradeWrapper, _next)); } } return(_next(context)); }
private static async Task InvokeAsyncCore(HttpUpgradeFeatureWrapper upgradeWrapper, RequestDelegate next) { upgradeWrapper.HttpContext.Features.Set <IHttpUpgradeFeature>(upgradeWrapper); try { await next(upgradeWrapper.HttpContext); } finally { if (upgradeWrapper.TelemetryStream is { } telemetryStream) { WebSocketsTelemetry.Log.WebSocketClosed( telemetryStream.EstablishedTime.Ticks, telemetryStream.GetCloseReason(upgradeWrapper.HttpContext), telemetryStream.MessagesRead, telemetryStream.MessagesWritten); } upgradeWrapper.HttpContext.Features.Set(upgradeWrapper.InnerUpgradeFeature); } }