@@ -17,15 +17,32 @@ namespace network {
17
17
namespace v2 {
18
18
using boost::asio::ip::tcp;
19
19
20
- struct request_helper {
20
+ // struct request_helper {
21
+ //
22
+ // request_helper() {
23
+ //
24
+ // }
25
+ //
26
+ // client::string_type host_;
27
+ // boost::asio::streambuf request_;
28
+ // std::promise<response> response_promise_;
29
+ // boost::asio::streambuf response_;
30
+ //
31
+ // };
32
+
33
+ struct resolve_helper {
21
34
22
- request_helper (boost::asio::io_service &io_service) {
35
+ };
23
36
24
- }
37
+ struct connect_helper {
25
38
26
- boost::asio::streambuf request_;
27
- std::promise<response> response_promise_;
28
- boost::asio::streambuf response_;
39
+ };
40
+
41
+ struct request_helper {
42
+
43
+ };
44
+
45
+ struct response_helper {
29
46
30
47
};
31
48
@@ -35,13 +52,17 @@ namespace network {
35
52
36
53
~impl () NETWORK_NOEXCEPT;
37
54
38
- void connect (const boost::system::error_code &ec);
55
+ void connect (client::string_type host,
56
+ const boost::system::error_code &ec,
57
+ tcp::resolver::iterator endpoint_iterator);
39
58
40
- void write_request (const boost::system::error_code &ec, std:: size_t bytes_written );
59
+ void write_request (const boost::system::error_code &ec);
41
60
42
- void read_response_status (const boost::system::error_code &ec, std::size_t bytes_written);
61
+ void read_response_status (const boost::system::error_code &ec,
62
+ std::size_t bytes_written);
43
63
44
- void read_response_headers (const boost::system::error_code &ec, std::size_t bytes_written);
64
+ void read_response_headers (const boost::system::error_code &ec,
65
+ std::size_t bytes_read);
45
66
46
67
std::future<response> do_request (method method_, request request_, request_options options);
47
68
@@ -75,19 +96,25 @@ namespace network {
75
96
lifetime_thread_.join ();
76
97
}
77
98
78
- void client::impl::connect (const boost::system::error_code &ec) {
99
+ void client::impl::connect (client::string_type host,
100
+ const boost::system::error_code &ec,
101
+ tcp::resolver::iterator endpoint_iterator) {
79
102
if (ec) {
80
103
return ;
81
104
}
82
105
83
- // endpoint!
84
- // host!
106
+ if (endpoint_iterator == tcp::resolver::iterator ()) {
107
+ return ;
108
+ }
85
109
86
- // connection_.async_connect(endpoint, reques
110
+ tcp::endpoint endpoint (*endpoint_iterator);
111
+ connection_.async_connect (endpoint, host,
112
+ [=] (const boost::system::error_code &ec) {
113
+ write_request (ec);
114
+ });
87
115
}
88
116
89
- void client::impl::write_request (const boost::system::error_code &ec,
90
- std::size_t bytes_written) {
117
+ void client::impl::write_request (const boost::system::error_code &ec) {
91
118
if (ec) {
92
119
return ;
93
120
}
@@ -96,7 +123,7 @@ namespace network {
96
123
}
97
124
98
125
void client::impl::read_response_status (const boost::system::error_code &ec,
99
- std::size_t bytes_read ) {
126
+ std::size_t ) {
100
127
if (ec) {
101
128
return ;
102
129
}
@@ -105,7 +132,7 @@ namespace network {
105
132
}
106
133
107
134
void client::impl::read_response_headers (const boost::system::error_code &ec,
108
- std::size_t bytes_read ) {
135
+ std::size_t ) {
109
136
if (ec) {
110
137
return ;
111
138
}
@@ -123,17 +150,17 @@ namespace network {
123
150
request_stream << req;
124
151
if (!request_stream) {
125
152
// set error
153
+ // response_promise_.set_value(response());
126
154
return response;
127
155
}
128
156
129
- // auto endpoints = resolver_.async_resolve(req.host(), req.port(),
130
- // [=](const boost::system::error_code &ec) {
131
- // if (ec) {
132
- // // promise set error
133
- // return;
134
- // }
135
- // this->connect(ec);
136
- // });
157
+ //
158
+
159
+ auto endpoints = resolver_.async_resolve (req.host (), req.port (),
160
+ [=](const boost::system::error_code &ec,
161
+ tcp::resolver::iterator endpoint_iterator) {
162
+ this ->connect (ec, endpoint_iterator);
163
+ });
137
164
138
165
return response;
139
166
}
0 commit comments