Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3442d76

Browse files
committed
Resolver now uses asynchronous futures.
1 parent3faaa69 commit3442d76

File tree

6 files changed

+50
-31
lines changed

6 files changed

+50
-31
lines changed

‎CMakeLists.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ endif()
144144
find_package(Doxygen)
145145
if (DOXYGEN_FOUND)
146146
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
147-
add_custom_target(docALL
147+
add_custom_target(doc
148148
${DOXYGEN_EXECUTABLE}${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
149149
WORKING_DIRECTORY${CMAKE_CURRENT_BINARY_DIR}
150150
COMMENT"Generating API documentation with Doxygen"VERBATIM)

‎http/src/http/v2/client/client.cpp‎

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,7 @@ namespace network {
4646
request_.set_method(method_);
4747

4848
std::future<response> response;
49-
resolver_.resolve(request_.host(), request_.port(),
50-
[&response] (const boost::system::error_code &ec,
51-
boost::iterator_range<async_resolver_delegate::resolver_iterator> resolvers) {
52-
if (ec) {
53-
return;
54-
}
55-
56-
// make TCP connection
57-
});
58-
59-
49+
auto endpoints = resolver_.resolve(request_.host(), request_.port());
6050
return response;
6151
}
6252

‎http/src/network/http/v2/client/connection/async_resolver_delegate.hpp‎

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,28 +52,35 @@ namespace network {
5252
/**
5353
* \brief Resolves a host asynchronously.
5454
*/
55-
virtualvoidresolve(const std::string &host, std::uint16_t port, on_resolved_fn on_resolved) {
55+
virtual std::future<resolver_iterator_range>
56+
resolve(const std::string &host, std::uint16_t port) {
5657
if (cache_resolved_) {
5758
endpoint_cache::iterator it = endpoint_cache_.find(boost::to_lower_copy(host));
5859
if (it != endpoint_cache_.end()) {
5960
boost::system::error_code ignored;
60-
on_resolved(ignored,it->second);
61-
return;
61+
promise_.set_value(it->second);
62+
return promise_.get_future();
6263
}
6364
}
6465

6566
resolver::queryquery(host,std::to_string(port));
6667
resolver_.async_resolve(query,
6768
resolver_strand_->wrap(
68-
[=](const boost::system::error_code &ec,
69-
resolver_iterator endpoint_iterator) {
70-
71-
auto resolvers =std::make_pair(endpoint_iterator,resolver_iterator());
72-
if (!ec && cache_resolved_) {
73-
endpoint_cache_.insert(std::make_pair(host, resolvers));
69+
[&host,this](const boost::system::error_code &ec,
70+
resolver_iterator endpoint_iterator) {
71+
if (ec) {
72+
promise_.set_value(std::make_pair(resolver_iterator(),resolver_iterator()));
73+
}
74+
else {
75+
auto resolvers =std::make_pair(endpoint_iterator,resolver_iterator());
76+
if (cache_resolved_) {
77+
endpoint_cache_.insert(std::make_pair(host, resolvers));
78+
}
79+
promise_.set_value(resolvers);
7480
}
75-
on_resolved(ec, resolvers);
7681
}));
82+
83+
return promise_.get_future();
7784
}
7885

7986
/**
@@ -87,6 +94,7 @@ namespace network {
8794

8895
typedef boost::asio::io_service::strand strand;
8996
typedef std::unordered_map<std::string, resolver_iterator_range> endpoint_cache;
97+
std::promise<resolver_iterator_range> promise_;
9098

9199
resolver resolver_;
92100
std::unique_ptr<strand> resolver_strand_;

‎http/src/network/http/v2/client/connection/resolver_delegate.hpp‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
#include<cstdint>
1010
#include<string>
1111
#include<functional>
12+
#include<utility>
13+
#include<future>
1214
#include<boost/asio/ip/tcp.hpp>
1315
#include<boost/range/iterator_range.hpp>
1416

@@ -27,6 +29,7 @@ namespace network {
2729
public:
2830

2931
typedef boost::asio::ip::tcp::resolver resolver;
32+
typedef boost::asio::ip::tcp::endpoint endpoint;
3033
typedef resolver::iterator resolver_iterator;
3134
typedef boost::iterator_range<resolver_iterator> resolver_iterator_range;
3235
typedef std::function<void (const boost::system::error_code &,
@@ -36,7 +39,8 @@ namespace network {
3639

3740
virtual~resolver_delegate()noexcept { }
3841

39-
virtualvoidresolve(const std::string &host, std::uint16_t port, on_resolved_fn on_resolved) = 0;
42+
virtual std::future<resolver_iterator_range>
43+
resolve(const std::string &host, std::uint16_t port) =0;
4044

4145
virtualvoidclear_resolved_cache() = 0;
4246

‎http/test/v2/features/client/async_resolver_test.cpp‎

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,12 @@ Describe(async_resolver) {
2222
// An HTTP server must be running on 127.0.0.1:80
2323
// maybe execute a script
2424

25-
resolver_->resolve("127.0.0.1",80,
26-
[] (const boost::system::error_code &ec,
27-
const http::async_resolver_delegate::resolver_iterator_range &endpoints) {
28-
for (auto endpoint : endpoints) {
29-
Assert::That(endpoint.endpoint().address().to_string(),Equals("127.0.0.1"));
30-
Assert::That(endpoint.endpoint().port(),Equals(80));
31-
}
32-
});
25+
auto endpoints = resolver_->resolve("127.0.0.1",80);
3326
io_service_->run_one();
27+
for (auto endpoint : endpoints.get()) {
28+
Assert::That(endpoint.endpoint().address().to_string(),Equals("127.0.0.1"));
29+
Assert::That(endpoint.endpoint().port(),Equals(80));
30+
}
3431
}
3532

3633
std::unique_ptr<boost::asio::io_service> io_service_;

‎http/test/v2/features/client/normal_connection_test.cpp‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// (See accompanying file LICENSE_1_0.txt or copy at
44
// http://www.boost.org/LICENSE_1_0.txt)
55

6+
#include<memory>
67
#include<igloo/igloo_alt.h>
78
#include<boost/asio.hpp>
89
#include"network/http/v2/client/connection/normal_connection_delegate.hpp"
@@ -11,6 +12,25 @@ using namespace igloo;
1112
using boost::asio::ip::tcp;
1213
namespacehttp= network::http::v2;
1314

15+
Describe(normal_http_connection) {
16+
17+
//void SetUp() {
18+
// io_service_.reset(new boost::asio::io_service);
19+
// connection_.reset(new normal_http_connection(io_service));
20+
//
21+
// // resolve endpoints
22+
//}
23+
24+
It(connects_to_localhost) {
25+
//auto ec = connection_.connect(endpoint_, "127.0.0.1");
26+
// ec
27+
}
28+
29+
std::unique_ptr<boost::asio::io_service> io_service_;
30+
std::unique_ptr<http::connection_delegate> connection_;
31+
32+
};
33+
1434
int
1535
main(int argc,char *argv[]) {
1636
returnTestRunner::RunAllTests(argc,const_cast<constchar **>(argv));

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp