13
13
public class KestrelPipeConnection : PipeConnectionBase
14
14
{
15
15
private ConnectionContext _context ;
16
+ private ISupplyController _supplyController ;
16
17
17
18
public KestrelPipeConnection ( ConnectionContext context , ConnectionOptions options )
18
19
: base ( context . Transport . Input , context . Transport . Output , options )
@@ -49,7 +50,8 @@ protected override async Task OnInputPipeReadAsync(ReadResult result)
49
50
if ( result is { IsCanceled : false , IsCompleted : false } )
50
51
UpdateLastActiveTime ( ) ;
51
52
52
- await SupplyRequiredAsync ( ) ;
53
+ if ( _supplyController != null )
54
+ await _supplyController . SupplyRequired ( ) . ConfigureAwait ( false ) ;
53
55
}
54
56
55
57
public override async ValueTask SendAsync ( Action < PipeWriter > write , CancellationToken cancellationToken )
@@ -64,7 +66,8 @@ public override async ValueTask SendAsync(ReadOnlyMemory<byte> buffer, Cancellat
64
66
UpdateLastActiveTime ( ) ;
65
67
}
66
68
67
- public override async ValueTask SendAsync < TPackage > ( IPackageEncoder < TPackage > packageEncoder , TPackage package , CancellationToken cancellationToken )
69
+ public override async ValueTask SendAsync < TPackage > ( IPackageEncoder < TPackage > packageEncoder , TPackage package ,
70
+ CancellationToken cancellationToken )
68
71
{
69
72
await base . SendAsync ( packageEncoder , package , cancellationToken ) ;
70
73
UpdateLastActiveTime ( ) ;
@@ -93,7 +96,11 @@ private void OnConnectionClosed()
93
96
protected override Task StartInputPipeTask < TPackageInfo > ( IObjectPipe < TPackageInfo > packagePipe ,
94
97
CancellationToken cancellationToken )
95
98
{
96
- cancellationToken . Register ( SupplyEnd ) ;
99
+ _supplyController = packagePipe as ISupplyController ;
100
+
101
+ if ( _supplyController != null )
102
+ cancellationToken . Register ( ( ) => _supplyController . SupplyEnd ( ) ) ;
103
+
97
104
return base . StartInputPipeTask ( packagePipe , cancellationToken ) ;
98
105
}
99
- }
106
+ }
0 commit comments