1
+ using System . Collections . Generic ;
1
2
using System . Threading ;
2
3
using System . Threading . Tasks ;
3
4
using Google . Protobuf ;
5
+ using Google . Protobuf . Collections ;
4
6
using Grpc . Core ;
5
7
using OliveHelpsLDK . Logging ;
6
8
using Proto ;
@@ -21,26 +23,62 @@ internal NetworkClient(ChannelBase channelBase, Session session, ILogger logger)
21
23
22
24
23
25
public Task < HTTPResponse > HTTPRequest ( HTTPRequest request , CancellationToken cancellationToken = default )
26
+ {
27
+ var message = ToProto ( request ) ;
28
+
29
+ return Client . HTTPRequestAsync ( message , CreateOptions ( cancellationToken ) ) . ResponseAsync
30
+ . ContinueWith ( LoggedParser < Task < HTTPResponseMsg > , HTTPResponse > ( task => FromProto ( task . Result ) ) ,
31
+ cancellationToken ) ;
32
+ }
33
+
34
+ private HTTPRequestMsg ToProto ( HTTPRequest request )
24
35
{
25
36
var message = new HTTPRequestMsg
26
37
{
27
38
Session = CreateSession ( ) ,
28
39
Body = ByteString . CopyFrom ( request . Body ) ,
29
40
Method = request . Method ,
30
41
Url = request . URL
31
- } ;
32
- return Client . HTTPRequestAsync ( message , CreateOptions ( cancellationToken ) ) . ResponseAsync
33
- . ContinueWith ( LoggedParser < Task < HTTPResponseMsg > , HTTPResponse > ( task => FromProto ( task . Result ) ) ,
34
- cancellationToken ) ;
42
+ } ;
43
+
44
+ AddHeadersToMessage ( message , request . Headers ) ;
45
+
46
+ return message ;
47
+ }
48
+
49
+ private static void AddHeadersToMessage ( HTTPRequestMsg message , IDictionary < string , IList < string > > requestHeaders )
50
+ {
51
+ foreach ( var kvp in requestHeaders )
52
+ {
53
+ var header = new HTTPHeader ( ) ;
54
+ header . Values . Add ( kvp . Value ) ;
55
+ message . Headers . Add ( kvp . Key , header ) ;
56
+ }
35
57
}
36
58
37
59
internal static HTTPResponse FromProto ( HTTPResponseMsg response )
38
60
{
39
- return new HTTPResponse
61
+ var clientResponse = new HTTPResponse
40
62
{
41
63
Data = response . ToByteArray ( ) ,
42
- ResponseCode = checked ( ( int ) response . ResponseCode )
64
+ ResponseCode = checked ( ( int ) response . ResponseCode ) ,
65
+ Headers = ParseHeaders ( response . Headers )
43
66
} ;
67
+
68
+ return clientResponse ;
69
+ }
70
+
71
+ private static IDictionary < string , IList < string > > ParseHeaders ( MapField < string , HTTPHeader > headers )
72
+ {
73
+ var parsedHeaders = new Dictionary < string , IList < string > > ( ) ;
74
+
75
+ foreach ( var kvp in headers )
76
+ {
77
+ var values = new List < string > ( kvp . Value . Values ) ;
78
+ parsedHeaders . Add ( kvp . Key , values ) ;
79
+ }
80
+
81
+ return parsedHeaders ;
44
82
}
45
83
}
46
84
}
0 commit comments