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

Commitff26d2d

Browse files
committed
Adding support for user-supplied io_service.
This commit adds a constructor for the HTTP client implementation thatadds support for taking a user-supplied io_service. This is true forboth the synchronous and asynchronous client implementations.Closes#25
1 parent3f787c0 commitff26d2d

File tree

10 files changed

+94
-60
lines changed

10 files changed

+94
-60
lines changed

‎boost/network/protocol/http/client.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ namespace boost { namespace network { namespace http {
7575
: base_facade_type(), pimpl(new pimpl_type(true,true))
7676
{}
7777

78+
explicitbasic_client(boost::asio::io_service & io_service)
79+
: base_facade_type(), pimpl(new pimpl_type(false,false, io_service))
80+
{}
81+
7882
//
7983
// =================================================================
8084

‎boost/network/protocol/http/client/async_impl.hpp

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,25 +33,36 @@ namespace boost { namespace network { namespace http {
3333

3434
async_client(bool cache_resolved,bool follow_redirect)
3535
: connection_base(cache_resolved, follow_redirect),
36-
service_(new boost::asio::io_service),
37-
resolver_(new resolver_type(*service_)),
38-
sentinel_(new boost::asio::io_service::work(*service_))
36+
service_ptr(new boost::asio::io_service),
37+
service_(*service_ptr),
38+
resolver_(service_),
39+
sentinel_(new boost::asio::io_service::work(service_))
3940
{
40-
connection_base::service_ = service_;
4141
connection_base::resolver_strand_.reset(new
42-
boost::asio::io_service::strand(*service_));
42+
boost::asio::io_service::strand(service_));
4343
lifetime_thread_.reset(newboost::thread(
4444
boost::bind(
4545
&boost::asio::io_service::run,
46-
service_
46+
&service_
4747
)));
4848
}
4949

50+
async_client(bool cache_resolved,bool follow_redirect, boost::asio::io_service & service)
51+
: connection_base(cache_resolved, follow_redirect),
52+
service_ptr(),
53+
service_(service),
54+
resolver_(service_),
55+
sentinel_(new boost::asio::io_service::work(service_))
56+
{
57+
}
58+
5059
~async_client()throw ()
5160
{
5261
sentinel_.reset();
53-
lifetime_thread_->join();
54-
lifetime_thread_.reset();
62+
if (lifetime_thread_.get()) {
63+
lifetime_thread_->join();
64+
lifetime_thread_.reset();
65+
}
5566
}
5667

5768
basic_response<Tag>constrequest_skeleton(
@@ -65,8 +76,9 @@ namespace boost { namespace network { namespace http {
6576
return connection_->send_request(method, request_, get_body);
6677
}
6778

68-
boost::shared_ptr<boost::asio::io_service> service_;
69-
boost::shared_ptr<resolver_type> resolver_;
79+
std::auto_ptr<boost::asio::io_service> service_ptr;
80+
boost::asio::io_service & service_;
81+
resolver_type resolver_;
7082
boost::shared_ptr<boost::asio::io_service::work> sentinel_;
7183
boost::shared_ptr<boost::thread> lifetime_thread_;
7284
};

‎boost/network/protocol/http/client/pimpl.hpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,21 @@ namespace boost { namespace network { namespace http {
3535
typedeftypename resolver<Tag>::type resolver_type;
3636
friendstructbasic_client_impl<Tag,version_major,version_minor>;
3737

38-
boost::asio::io_service service_;
38+
std::auto_ptr<boost::asio::io_service> service_ptr;
39+
boost::asio::io_service & service_;
3940
resolver_type resolver_;
4041

4142
sync_client(bool cache_resolved,bool follow_redirect)
4243
: connection_base(cache_resolved, follow_redirect),
43-
service_(),
44+
service_ptr(new boost::asio::io_service),
45+
service_(*service_ptr),
46+
resolver_(service_)
47+
{}
48+
49+
sync_client(bool cache_resolved,bool follow_redirect, boost::asio::io_service & service)
50+
: connection_base(cache_resolved, follow_redirect),
51+
service_ptr(),
52+
service_(service),
4453
resolver_(service_)
4554
{}
4655

@@ -86,6 +95,10 @@ namespace boost { namespace network { namespace http {
8695
: base_type(cache_resolved, follow_redirect)
8796
{}
8897

98+
basic_client_impl(bool cache_resolved,bool follow_redirect, boost::asio::io_service & service)
99+
: base_type(cache_resolved, follow_redirect, service)
100+
{}
101+
89102
~basic_client_impl()
90103
{}
91104
};

‎boost/network/protocol/http/impl/async_connection_base.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace boost { namespace network { namespace http { namespace impl {
2424
typedef basic_request<Tag> request;
2525
typedef basic_response<Tag> response;
2626

27-
static boost::shared_ptr<async_connection_base<Tag,version_major,version_minor> >new_connection(resolve_function resolve,boost::shared_ptr<resolver_type> resolver,bool follow_redirect,bool https) {
27+
static boost::shared_ptr<async_connection_base<Tag,version_major,version_minor> >new_connection(resolve_function resolve, resolver_type & resolver,bool follow_redirect,bool https) {
2828
boost::shared_ptr<async_connection_base<Tag,version_major,version_minor> > temp;
2929
if (https) {
3030
#ifdef BOOST_NETWORK_ENABLE_HTTPS

‎boost/network/protocol/http/impl/http_async_connection.hpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ namespace boost { namespace network { namespace http { namespace impl {
4646
typedeftypename base::resolver_base::resolve_function resolve_function;
4747

4848
http_async_connection(
49-
boost::shared_ptr<resolver_type> resolver,
49+
resolver_type & resolver,
5050
resolve_function resolve,
5151
bool follow_redirect
5252
) :
5353
follow_redirect_(follow_redirect),
5454
resolver_(resolver),
5555
resolve_(resolve),
56-
request_strand_(new boost::asio::io_service::strand(resolver->get_io_service()))
56+
request_strand_(resolver.get_io_service())
5757
{}
5858

5959

@@ -65,7 +65,7 @@ namespace boost { namespace network { namespace http { namespace impl {
6565
boost::uint16_t port_ =port(request);
6666
resolve_(resolver_,host(request),
6767
port_,
68-
request_strand_->wrap(
68+
request_strand_.wrap(
6969
boost::bind(
7070
&http_async_connection<Tag,version_major,version_minor>::handle_resolved,
7171
http_async_connection<Tag,version_major,version_minor>::shared_from_this(),
@@ -83,10 +83,10 @@ namespace boost { namespace network { namespace http { namespace impl {
8383
port
8484
);
8585
socket_.reset(newboost::asio::ip::tcp::socket(
86-
resolver_->get_io_service()));
86+
resolver_.get_io_service()));
8787
socket_->async_connect(
8888
endpoint,
89-
request_strand_->wrap(
89+
request_strand_.wrap(
9090
boost::bind(
9191
&http_async_connection<Tag,version_major,version_minor>::handle_connected,
9292
http_async_connection<Tag,version_major,version_minor>::shared_from_this(),
@@ -108,7 +108,7 @@ namespace boost { namespace network { namespace http { namespace impl {
108108
voidhandle_connected(boost::uint16_t port,bool get_body, resolver_iterator_pair endpoint_range, boost::system::error_codeconst & ec) {
109109
if (!ec) {
110110
boost::asio::async_write(*socket_,boost::asio::buffer(command_string_.data(), command_string_.size()),
111-
request_strand_->wrap(
111+
request_strand_.wrap(
112112
boost::bind(
113113
&http_async_connection<Tag,version_major,version_minor>::handle_sent_request,
114114
http_async_connection<Tag,version_major,version_minor>::shared_from_this(),
@@ -124,10 +124,10 @@ namespace boost { namespace network { namespace http { namespace impl {
124124
port
125125
);
126126
socket_.reset(newboost::asio::ip::tcp::socket(
127-
resolver_->get_io_service()));
127+
resolver_.get_io_service()));
128128
socket_->async_connect(
129129
endpoint,
130-
request_strand_->wrap(
130+
request_strand_.wrap(
131131
boost::bind(
132132
&http_async_connection<Tag,version_major,version_minor>::handle_connected,
133133
http_async_connection<Tag,version_major,version_minor>::shared_from_this(),
@@ -160,7 +160,7 @@ namespace boost { namespace network { namespace http { namespace impl {
160160
boost::asio::mutable_buffers_1(
161161
this->part.c_array(),
162162
this->part.size()),
163-
request_strand_->wrap(
163+
request_strand_.wrap(
164164
boost::bind(
165165
&http_async_connection<Tag,version_major,version_minor>::handle_received_data,
166166
http_async_connection<Tag,version_major,version_minor>::shared_from_this(),
@@ -187,7 +187,7 @@ namespace boost { namespace network { namespace http { namespace impl {
187187
case version:
188188
parsed_ok =
189189
this->parse_version(*socket_,
190-
request_strand_->wrap(
190+
request_strand_.wrap(
191191
boost::bind(
192192
&http_async_connection<Tag,version_major,version_minor>::handle_received_data,
193193
http_async_connection<Tag,version_major,version_minor>::shared_from_this(),
@@ -199,7 +199,7 @@ namespace boost { namespace network { namespace http { namespace impl {
199199
case status:
200200
parsed_ok =
201201
this->parse_status(*socket_,
202-
request_strand_->wrap(
202+
request_strand_.wrap(
203203
boost::bind(
204204
&http_async_connection<Tag,version_major,version_minor>::handle_received_data,
205205
http_async_connection<Tag,version_major,version_minor>::shared_from_this(),
@@ -211,7 +211,7 @@ namespace boost { namespace network { namespace http { namespace impl {
211211
case status_message:
212212
parsed_ok =
213213
this->parse_status_message(*socket_,
214-
request_strand_->wrap(
214+
request_strand_.wrap(
215215
boost::bind(
216216
&http_async_connection<Tag,version_major,version_minor>::handle_received_data,
217217
http_async_connection<Tag,version_major,version_minor>::shared_from_this(),
@@ -223,7 +223,7 @@ namespace boost { namespace network { namespace http { namespace impl {
223223
case headers:
224224
fusion::tie(parsed_ok, remainder) =
225225
this->parse_headers(*socket_,
226-
request_strand_->wrap(
226+
request_strand_.wrap(
227227
boost::bind(
228228
&http_async_connection<Tag,version_major,version_minor>::handle_received_data,
229229
http_async_connection<Tag,version_major,version_minor>::shared_from_this(),
@@ -238,7 +238,7 @@ namespace boost { namespace network { namespace http { namespace impl {
238238
}
239239
this->parse_body(
240240
*socket_,
241-
request_strand_->wrap(
241+
request_strand_.wrap(
242242
boost::bind(
243243
&http_async_connection<Tag,version_major,version_minor>::handle_received_data,
244244
http_async_connection<Tag,version_major,version_minor>::shared_from_this(),
@@ -268,7 +268,7 @@ namespace boost { namespace network { namespace http { namespace impl {
268268
}else {
269269
this->parse_body(
270270
*socket_,
271-
request_strand_->wrap(
271+
request_strand_.wrap(
272272
boost::bind(
273273
&http_async_connection<Tag,version_major,version_minor>::handle_received_data,
274274
http_async_connection<Tag,version_major,version_minor>::shared_from_this(),
@@ -304,10 +304,10 @@ namespace boost { namespace network { namespace http { namespace impl {
304304
}
305305

306306
bool follow_redirect_;
307-
boost::shared_ptr<resolver_type> resolver_;
307+
resolver_type & resolver_;
308308
boost::shared_ptr<boost::asio::ip::tcp::socket> socket_;
309309
resolve_function resolve_;
310-
boost::shared_ptr<boost::asio::io_service::strand> request_strand_;
310+
boost::asio::io_service::strand request_strand_;
311311
string_type command_string_;
312312
string_type method;
313313
};

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp