10
10
11
11
using GenHTTP . Engine . Infrastructure . Configuration ;
12
12
using GenHTTP . Engine . Protocol ;
13
+ using GenHTTP . Engine . Protocol . Parser ;
14
+
15
+ using PooledAwait ;
13
16
14
17
namespace GenHTTP . Engine
15
18
{
@@ -40,6 +43,8 @@ internal sealed class ClientHandler
40
43
41
44
private bool ? KeepAlive { get ; set ; }
42
45
46
+ private ResponseHandler ResponseHandler { get ; set ; }
47
+
43
48
#endregion
44
49
45
50
#region Initialization
@@ -53,13 +58,15 @@ internal ClientHandler(Socket socket, Stream stream, IServer server, IEndPoint e
53
58
Connection = socket ;
54
59
55
60
Stream = stream ;
61
+
62
+ ResponseHandler = new ResponseHandler ( Server , Stream , Connection , Configuration ) ;
56
63
}
57
64
58
65
#endregion
59
66
60
67
#region Functionality
61
68
62
- internal async ValueTask Run ( )
69
+ internal async PooledValueTask Run ( )
63
70
{
64
71
try
65
72
{
@@ -98,7 +105,7 @@ internal async ValueTask Run()
98
105
}
99
106
}
100
107
101
- private async ValueTask HandlePipe ( PipeReader reader )
108
+ private async PooledValueTask HandlePipe ( PipeReader reader )
102
109
{
103
110
try
104
111
{
@@ -122,24 +129,19 @@ private async ValueTask HandlePipe(PipeReader reader)
122
129
}
123
130
}
124
131
125
- private async ValueTask < bool > HandleRequest ( RequestBuilder builder )
132
+ private async PooledValueTask < bool > HandleRequest ( RequestBuilder builder )
126
133
{
127
134
var address = ( Connection . RemoteEndPoint as IPEndPoint ) ? . Address ;
128
135
129
136
using var request = builder . Connection ( Server , EndPoint , address ) . Build ( ) ;
130
137
131
- if ( KeepAlive is null )
132
- {
133
- KeepAlive = request [ "Connection" ] ? . Equals ( "Keep-Alive" , StringComparison . InvariantCultureIgnoreCase ) ?? true ;
134
- }
138
+ KeepAlive ??= request [ "Connection" ] ? . Equals ( "Keep-Alive" , StringComparison . InvariantCultureIgnoreCase ) ?? true ;
135
139
136
140
bool keepAlive = ( bool ) KeepAlive ;
137
141
138
- var responseHandler = new ResponseHandler ( Server , Stream , Connection , Configuration ) ;
139
-
140
142
using var response = await Server . Handler . HandleAsync ( request ) . ConfigureAwait ( false ) ?? throw new InvalidOperationException ( "The root request handler did not return a response" ) ;
141
143
142
- var success = await responseHandler . Handle ( request , response , keepAlive ) ;
144
+ var success = await ResponseHandler . Handle ( request , response , keepAlive ) ;
143
145
144
146
if ( ! success || ! keepAlive )
145
147
{
0 commit comments