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

Commit58d5f94

Browse files
committed
Made async_resolver and ABC; added implementation in tcp_resolver.
1 parent416fe04 commit58d5f94

File tree

4 files changed

+133
-78
lines changed

4 files changed

+133
-78
lines changed

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

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include<network/http/v2/method.hpp>
1212
#include<network/http/v2/client/request.hpp>
1313
#include<network/http/v2/client/response.hpp>
14-
#include<network/http/v2/client/connection/async_resolver.hpp>
14+
#include<network/http/v2/client/connection/tcp_resolver.hpp>
1515
#include<network/http/v2/client/connection/normal_connection.hpp>
1616

1717
namespacenetwork {
@@ -65,8 +65,8 @@ namespace network {
6565

6666
client_options options_;
6767
boost::asio::io_service io_service_;
68-
async_resolver resolver_;
69-
normal_connection connection_;
68+
std::unique_ptr<async_resolver> resolver_;
69+
std::unique_ptr<async_connection> connection_;
7070
std::unique_ptr<boost::asio::io_service::work> sentinel_;
7171
std::thread lifetime_thread_;
7272

@@ -81,8 +81,8 @@ namespace network {
8181

8282
client::impl::impl(client_options options)
8383
: options_(options)
84-
, resolver_(io_service_, options.cache_resolved())
85-
, connection_(io_service_)
84+
, resolver_(new tcp_resolver(io_service_, options.cache_resolved()))
85+
, connection_(new normal_connection(io_service_))
8686
, sentinel_(new boost::asio::io_service::work(io_service_))
8787
, lifetime_thread_([=] () { io_service_.run(); }) {
8888

@@ -96,14 +96,12 @@ namespace network {
9696
voidclient::impl::connect(const boost::system::error_code &ec,
9797
tcp::resolver::iterator endpoint_iterator) {
9898
tcp::endpointendpoint(*endpoint_iterator);
99-
std::cout <<"Resolved" << endpoint << std::endl;
10099
//connection_.async_connect(endpoint,
101100
// [=] (const boost::system::error_code &ec) {
102101
// if (ec) {
103102
// return;
104103
// }
105104
//
106-
// std::cout << "Oh." << std::endl;
107105
// //response_promise_.set_value(v2::response());
108106
// //write_request(ec);
109107
// });
@@ -117,11 +115,11 @@ namespace network {
117115
return;
118116
}
119117

120-
connection_.async_write(request_,
121-
[=] (const boost::system::error_code &ec,
122-
std::size_t bytes_written) {
123-
read_response_status(ec, bytes_written);
124-
});
118+
connection_->async_write(request_,
119+
[=] (const boost::system::error_code &ec,
120+
std::size_t bytes_written) {
121+
read_response_status(ec, bytes_written);
122+
});
125123
}
126124

127125
voidclient::impl::read_response_status(const boost::system::error_code &ec,
@@ -132,13 +130,13 @@ namespace network {
132130
return;
133131
}
134132

135-
connection_.async_read_until(response_,
136-
"\r\n",
137-
[=] (const boost::system::error_code &ec,
138-
std::size_t bytes_read) {
139-
// fill headers
140-
read_response_headers(ec, bytes_read);
141-
});
133+
connection_->async_read_until(response_,
134+
"\r\n",
135+
[=] (const boost::system::error_code &ec,
136+
std::size_t bytes_read) {
137+
// fill headers
138+
read_response_headers(ec, bytes_read);
139+
});
142140
}
143141

144142
voidclient::impl::read_response_headers(const boost::system::error_code &ec,
@@ -149,12 +147,12 @@ namespace network {
149147
return;
150148
}
151149

152-
connection_.async_read_until(response_,
153-
"\r\n\r\n",
154-
[=] (const boost::system::error_code &ec,
155-
std::size_t bytes_read) {
156-
// um...
157-
});
150+
connection_->async_read_until(response_,
151+
"\r\n\r\n",
152+
[=] (const boost::system::error_code &ec,
153+
std::size_t bytes_read) {
154+
// um...
155+
});
158156
}
159157

160158
std::future<response>client::impl::do_request(method met,

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

Lines changed: 6 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,8 @@
88
#ifndef NETWORK_HTTP_V2_CLIENT_CONNECTION_ASYNC_RESOLVER_INC
99
#defineNETWORK_HTTP_V2_CLIENT_CONNECTION_ASYNC_RESOLVER_INC
1010

11-
#include<stdexcept>
12-
#include<cstdint>
13-
#include<string>
14-
#include<boost/asio/io_service.hpp>
15-
#include<boost/asio/strand.hpp>
11+
#include<functional>
1612
#include<boost/asio/ip/tcp.hpp>
17-
#include<boost/exception/all.hpp>
18-
#include<network/config.hpp>
19-
#include<network/http/v2/client/connection/endpoint_cache.hpp>
2013

2114
namespacenetwork {
2215
namespacehttp {
@@ -51,17 +44,14 @@ namespace network {
5144
/**
5245
* \brief Constructor.
5346
*/
54-
async_resolver(boost::asio::io_service &service,bool cache_resolved =false)
55-
: resolver_(service)
56-
, resolver_strand_(new boost::asio::io_service::strand(service))
57-
, cache_resolved_(cache_resolved) {
47+
async_resolver() {
5848

5949
}
6050

6151
/**
6252
* \brief Destructor.
6353
*/
64-
~async_resolver()noexcept {
54+
virtual~async_resolver()noexcept {
6555

6656
}
6757

@@ -71,48 +61,13 @@ namespace network {
7161
* \param port The port number.
7262
* \param callback A callback handler.
7363
*/
74-
voidasync_resolve(const std::string &host, std::uint16_t port, resolve_callback handler) {
75-
if (cache_resolved_) {
76-
auto it = endpoint_cache_.find(host);
77-
if (it != endpoint_cache_.end()) {
78-
boost::system::error_code ec;
79-
handler(ec, it->second);
80-
return;
81-
}
82-
}
83-
84-
resolver::queryquery(host,std::to_string(port));
85-
resolver_.async_resolve(query,
86-
resolver_strand_->wrap(
87-
[&host, &handler,this](const boost::system::error_code &ec,
88-
resolver_iterator endpoint_iterator) {
89-
if (ec) {
90-
handler(ec,resolver_iterator());
91-
}
92-
else {
93-
if (cache_resolved_) {
94-
endpoint_cache_.insert(host, endpoint_iterator);
95-
}
96-
handler(ec, endpoint_iterator);
97-
}
98-
}));
99-
}
64+
virtualvoidasync_resolve(const std::string &host, std::uint16_t port,
65+
resolve_callback handler) = 0;
10066

10167
/**
10268
* \brief Clears the cache of already resolved endpoints.
10369
*/
104-
voidclear_resolved_cache() {
105-
endpoint_cache_.clear();
106-
}
107-
108-
private:
109-
110-
typedef boost::asio::io_service::strand strand;
111-
112-
resolver resolver_;
113-
std::unique_ptr<strand> resolver_strand_;
114-
bool cache_resolved_;
115-
endpoint_cache endpoint_cache_;
70+
virtualvoidclear_resolved_cache() = 0;
11671

11772
};
11873
}// namespace v2
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// Copyright (C) 2013 by Glyn Matthews
2+
// Copyright 2011 Dean Michael Berris <dberris@google.com>.
3+
// Copyright 2011 Google, Inc.
4+
// Distributed under the Boost Software License, Version 1.0.
5+
// (See accompanying file LICENSE_1_0.txt or copy at
6+
// http://www.boost.org/LICENSE_1_0.txt)
7+
8+
#ifndef NETWORK_HTTP_V2_CLIENT_CONNECTION_TCP_RESOLVER_INC
9+
#defineNETWORK_HTTP_V2_CLIENT_CONNECTION_TCP_RESOLVER_INC
10+
11+
#include<stdexcept>
12+
#include<cstdint>
13+
#include<string>
14+
#include<boost/asio/io_service.hpp>
15+
#include<boost/asio/strand.hpp>
16+
#include<boost/asio/ip/tcp.hpp>
17+
#include<boost/exception/all.hpp>
18+
#include<network/config.hpp>
19+
#include<network/http/v2/client/connection/async_resolver.hpp>
20+
#include<network/http/v2/client/connection/endpoint_cache.hpp>
21+
22+
namespacenetwork {
23+
namespacehttp {
24+
namespacev2 {
25+
/**
26+
* \class tcp_resolver network/http/v2/client/connection/tcp_resolver.hpp
27+
* \brief Resolves and maintains a cache of hosts.
28+
*/
29+
classtcp_resolver :publicasync_resolver {
30+
31+
tcp_resolver(const tcp_resolver &) =delete;
32+
tcp_resolver &operator = (const tcp_resolver &) =delete;
33+
34+
public:
35+
36+
using async_resolver::resolver;
37+
using async_resolver::resolver_iterator;
38+
using async_resolver::resolve_callback;
39+
40+
/**
41+
* \brief Constructor.
42+
*/
43+
tcp_resolver(boost::asio::io_service &service,bool cache_resolved =false)
44+
: resolver_(service)
45+
, resolver_strand_(new boost::asio::io_service::strand(service))
46+
, cache_resolved_(cache_resolved) {
47+
48+
}
49+
50+
/**
51+
* \brief Destructor.
52+
*/
53+
virtual~tcp_resolver()noexcept {
54+
55+
}
56+
57+
virtualvoidasync_resolve(const std::string &host, std::uint16_t port, resolve_callback handler) {
58+
if (cache_resolved_) {
59+
auto it = endpoint_cache_.find(host);
60+
if (it != endpoint_cache_.end()) {
61+
boost::system::error_code ec;
62+
handler(ec, it->second);
63+
return;
64+
}
65+
}
66+
67+
resolver::queryquery(host,std::to_string(port));
68+
resolver_.async_resolve(query,
69+
resolver_strand_->wrap(
70+
[&host, &handler,this](const boost::system::error_code &ec,
71+
resolver_iterator endpoint_iterator) {
72+
if (ec) {
73+
handler(ec,resolver_iterator());
74+
}
75+
else {
76+
if (cache_resolved_) {
77+
endpoint_cache_.insert(host, endpoint_iterator);
78+
}
79+
handler(ec, endpoint_iterator);
80+
}
81+
}));
82+
}
83+
84+
virtualvoidclear_resolved_cache() {
85+
endpoint_cache_.clear();
86+
}
87+
88+
private:
89+
90+
typedef boost::asio::io_service::strand strand;
91+
92+
resolver resolver_;
93+
std::unique_ptr<strand> resolver_strand_;
94+
bool cache_resolved_;
95+
endpoint_cache endpoint_cache_;
96+
97+
};
98+
}// namespace v2
99+
}// namespace http
100+
}// namespace network
101+
102+
#endif// NETWORK_HTTP_V2_CLIENT_CONNECTION_TCP_RESOLVER_INC

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include<iostream>
77
#include<igloo/igloo_alt.h>
88
#include<boost/asio.hpp>
9-
#include"network/http/v2/client/connection/async_resolver.hpp"
9+
#include"network/http/v2/client/connection/tcp_resolver.hpp"
1010

1111
usingnamespaceigloo;
1212
using boost::asio::ip::tcp;
@@ -19,7 +19,7 @@ Describe(async_resolver) {
1919
// maybe execute a script
2020

2121
io_service_.reset(new boost::asio::io_service);
22-
resolver_.reset(newhttp::async_resolver(*io_service_));
22+
resolver_.reset(newhttp::tcp_resolver(*io_service_));
2323
}
2424

2525
It(resolves_localhost) {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp