Skip to content

Commit 8295fb8

Browse files
committed
Well these test all pass...
1 parent 7415d62 commit 8295fb8

File tree

7 files changed

+203
-206
lines changed

7 files changed

+203
-206
lines changed

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

Lines changed: 62 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#include <boost/asio/io_service.hpp>
1414
#include <boost/asio/strand.hpp>
1515
#include <boost/asio/ip/tcp.hpp>
16-
#include <boost/range/iterator_range.hpp>
1716
#include <boost/algorithm/string/case_conv.hpp>
1817
#include <boost/exception/all.hpp>
1918
#include <network/http/v2/client/connection/resolver_delegate.hpp>
@@ -27,79 +26,76 @@ namespace network {
2726
*/
2827
class async_resolver_delegate : public resolver_delegate {
2928

30-
async_resolver_delegate(const async_resolver_delegate &) = delete;
31-
async_resolver_delegate &operator = (const async_resolver_delegate &) = delete;
29+
async_resolver_delegate(const async_resolver_delegate &) = delete;
30+
async_resolver_delegate &operator = (const async_resolver_delegate &) = delete;
3231

3332
public:
3433

35-
/**
36-
* \brief Constructor.
37-
*/
38-
async_resolver_delegate(boost::asio::io_service &service, bool cache_resolved = false)
39-
: resolver_(service)
40-
, resolver_strand_(new boost::asio::io_service::strand(service))
41-
, cache_resolved_(cache_resolved) {
42-
43-
}
44-
45-
/**
46-
* \brief Destructor.
47-
*/
48-
virtual ~async_resolver_delegate() noexcept {
49-
50-
}
51-
52-
/**
53-
* \brief Resolves a host asynchronously.
54-
*/
55-
56-
virtual void resolve(const std::string &host, std::uint16_t port, callback_fn callback) {
57-
if (cache_resolved_) {
58-
endpoint_cache::iterator it = endpoint_cache_.find(boost::to_lower_copy(host));
59-
if (it != endpoint_cache_.end()) {
60-
boost::system::error_code ec;
61-
callback(ec, it->second);
62-
return;
63-
}
64-
}
65-
66-
resolver::query query(host, std::to_string(port));
67-
resolver_.async_resolve(query,
34+
/**
35+
* \brief Constructor.
36+
*/
37+
async_resolver_delegate(boost::asio::io_service &service, bool cache_resolved = false)
38+
: resolver_(service)
39+
, resolver_strand_(new boost::asio::io_service::strand(service))
40+
, cache_resolved_(cache_resolved) {
41+
42+
}
43+
44+
/**
45+
* \brief Destructor.
46+
*/
47+
virtual ~async_resolver_delegate() noexcept {
48+
49+
}
50+
51+
/**
52+
* \brief Resolves a host asynchronously.
53+
*/
54+
55+
virtual void resolve(const std::string &host, std::uint16_t port, callback_fn callback) {
56+
if (cache_resolved_) {
57+
endpoint_cache::iterator it = endpoint_cache_.find(boost::to_lower_copy(host));
58+
if (it != endpoint_cache_.end()) {
59+
boost::system::error_code ec;
60+
callback(ec, it->second);
61+
return;
62+
}
63+
}
64+
65+
66+
resolver::query query(host, std::to_string(port));
67+
resolver_.async_resolve(query,
6868
resolver_strand_->wrap(
69-
[&host, &callback, this](const boost::system::error_code &ec,
70-
resolver_iterator endpoint_iterator) {
71-
if (ec) {
72-
auto resolvers = std::make_pair(resolver_iterator(), resolver_iterator());
73-
callback(ec, resolvers);
74-
}
75-
else {
76-
auto resolvers = std::make_pair(endpoint_iterator, resolver_iterator());
77-
if (cache_resolved_) {
78-
endpoint_cache_.insert(std::make_pair(host, resolvers));
79-
}
80-
callback(ec, resolvers);
81-
}
82-
}));
83-
84-
}
85-
86-
/**
87-
* \brief Clears the cache of already resolved endpoints.
88-
*/
89-
void clear_resolved_cache() {
90-
endpoint_cache().swap(endpoint_cache_);
91-
}
69+
[&host, &callback, this](const boost::system::error_code &ec,
70+
resolver_iterator endpoint_iterator) {
71+
if (ec) {
72+
callback(ec, resolver_iterator());
73+
}
74+
else {
75+
if (cache_resolved_) {
76+
endpoint_cache_.insert(std::make_pair(host, endpoint_iterator));
77+
}
78+
callback(ec, endpoint_iterator);
79+
}
80+
}));
81+
}
82+
83+
/**
84+
* \brief Clears the cache of already resolved endpoints.
85+
*/
86+
void clear_resolved_cache() {
87+
endpoint_cache().swap(endpoint_cache_);
88+
}
9289

9390
private:
9491

95-
typedef boost::asio::io_service::strand strand;
96-
typedef std::unordered_map<std::string, resolver_iterator_range> endpoint_cache;
97-
std::promise<std::pair<boost::system::error_code, resolver_iterator_range>> promise_;
92+
typedef boost::asio::io_service::strand strand;
93+
typedef std::unordered_map<std::string, resolver_iterator> endpoint_cache;
9894

99-
resolver resolver_;
100-
std::unique_ptr<strand> resolver_strand_;
101-
bool cache_resolved_;
102-
endpoint_cache endpoint_cache_;
95+
resolver resolver_;
96+
std::unique_ptr<strand> resolver_strand_;
97+
bool cache_resolved_;
98+
endpoint_cache endpoint_cache_;
10399

104100
};
105101
} // namespace v2

http/src/network/http/v2/client/connection/connection_delegate.hpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
#include <functional>
1010
#include <string>
11-
#include <future>
1211
#include <boost/asio/ip/tcp.hpp>
1312
#include <boost/asio/streambuf.hpp>
1413
#include <boost/asio/buffer.hpp>
@@ -18,24 +17,27 @@ namespace network {
1817
namespace v2 {
1918
class connection_delegate {
2019

21-
connection_delegate(const connection_delegate &) = delete;
22-
connection_delegate &operator = (const connection_delegate &) = delete;
20+
connection_delegate(const connection_delegate &) = delete;
21+
connection_delegate &operator = (const connection_delegate &) = delete;
2322

2423
public:
2524

26-
connection_delegate() = default;
25+
typedef std::function<void (const boost::system::error_code &)> connect_callback;
26+
typedef std::function<void (const boost::system::error_code &, std::size_t)> write_callback;
27+
typedef std::function<void (const boost::system::error_code &, std::size_t)> read_callback;
2728

28-
virtual ~connection_delegate() noexcept { }
29+
connection_delegate() = default;
2930

30-
virtual std::future<boost::system::error_code>
31-
connect(boost::asio::ip::tcp::endpoint &endpoint,
32-
const std::string &host) = 0;
31+
virtual ~connection_delegate() noexcept { }
3332

34-
virtual std::future<std::pair<boost::system::error_code, std::size_t>>
35-
write(boost::asio::streambuf &command_streambuf) = 0;
33+
virtual void async_connect(boost::asio::ip::tcp::endpoint &endpoint,
34+
const std::string &host, connect_callback callback) = 0;
3635

37-
virtual std::future<std::pair<boost::system::error_code, std::size_t>>
38-
read_some(const boost::asio::mutable_buffers_1 &read_buffer) = 0;
36+
virtual void async_write(boost::asio::streambuf &command_streambuf,
37+
write_callback callback) = 0;
38+
39+
virtual void async_read_some(const boost::asio::mutable_buffers_1 &read_buffer,
40+
read_callback callback) = 0;
3941

4042
};
4143
} // namespace v2

http/src/network/http/v2/client/connection/normal_connection_delegate.hpp

Lines changed: 31 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -6,80 +6,51 @@
66
#ifndef __NETWORK_HTTP_V2_CLIENT_CONNECTION_NORMAL_CONNECTION_DELEGATE_INC__
77
#define __NETWORK_HTTP_V2_CLIENT_CONNECTION_NORMAL_CONNECTION_DELEGATE_INC__
88

9-
#include "network/http/v2/client/connection/connection_delegate.hpp"
109
#include <boost/asio/ip/tcp.hpp>
1110
#include <boost/asio/io_service.hpp>
11+
#include <network/http/v2/client/connection/connection_delegate.hpp>
1212

1313
namespace network {
1414
namespace http {
1515
namespace v2 {
1616
class normal_connection_delegate : public connection_delegate {
1717

18-
normal_connection_delegate(const normal_connection_delegate &) = delete;
19-
normal_connection_delegate &operator = (const normal_connection_delegate &) = delete;
18+
normal_connection_delegate(const normal_connection_delegate &) = delete;
19+
normal_connection_delegate &operator = (const normal_connection_delegate &) = delete;
2020

2121
public:
2222

23-
explicit normal_connection_delegate(boost::asio::io_service &io_service)
24-
: io_service_(io_service) {
25-
26-
}
27-
28-
virtual ~normal_connection_delegate() noexcept {
29-
30-
}
31-
32-
virtual std::future<boost::system::error_code>
33-
connect(boost::asio::ip::tcp::endpoint &endpoint,
34-
const std::string &host) {
35-
auto promise = std::make_shared<std::promise<boost::system::error_code>>();
36-
auto result = promise->get_future();
37-
38-
socket_.reset(new boost::asio::ip::tcp::socket(io_service_));
39-
socket_->async_connect(endpoint,
40-
[=](const boost::system::error_code &ec) {
41-
promise->set_value(ec);
42-
});
43-
// boost::system::error_code ec;
44-
// socket_->connect(endpoint, ec);
45-
// promise->set_value(ec);
46-
return std::move(result);
47-
}
48-
49-
virtual std::future<std::pair<boost::system::error_code, std::size_t>>
50-
write(boost::asio::streambuf &command_streambuf) {
51-
auto promise = std::make_shared<
52-
std::promise<std::pair<boost::system::error_code, std::size_t>>>();
53-
auto result = promise->get_future();
54-
55-
boost::asio::async_write(*socket_, command_streambuf,
56-
[&promise] (const boost::system::error_code &ec, std::size_t size) {
57-
promise->set_value(std::make_pair(ec, size));
58-
});
59-
return std::move(result);
60-
}
61-
62-
virtual std::future<std::pair<boost::system::error_code, std::size_t>>
63-
read_some(const boost::asio::mutable_buffers_1 &read_buffer) {
64-
auto promise = std::make_shared<
65-
std::promise<std::pair<boost::system::error_code, std::size_t>>>();
66-
auto result = promise->get_future();
67-
68-
// socket_->async_read_some(read_buffer,
69-
// [this] (const boost::system::error_code &ec, std::size_t bytes_read) {
70-
// read_promise_.set_value(std::make_pair(ec, bytes_read));
71-
// });
72-
boost::system::error_code ec;
73-
auto bytes_read = boost::asio::read(*socket_, read_buffer, ec);
74-
promise->set_value(std::make_pair(ec, bytes_read));
75-
return std::move(result);
76-
}
23+
explicit normal_connection_delegate(boost::asio::io_service &io_service)
24+
: io_service_(io_service) {
25+
26+
}
27+
28+
virtual ~normal_connection_delegate() noexcept {
29+
30+
}
31+
32+
virtual void async_connect(boost::asio::ip::tcp::endpoint &endpoint,
33+
const std::string &host,
34+
connect_callback callback) {
35+
socket_.reset(new boost::asio::ip::tcp::socket(io_service_));
36+
socket_->async_connect(endpoint, callback);
37+
}
38+
39+
virtual void async_write(boost::asio::streambuf &command_streambuf,
40+
write_callback callback) {
41+
boost::asio::async_write(*socket_, command_streambuf, callback);
42+
}
43+
44+
virtual void async_read_some(const boost::asio::mutable_buffers_1 &read_buffer,
45+
read_callback callback) {
46+
socket_->async_read_some(read_buffer, callback);
47+
}
7748

7849
private:
7950

80-
boost::asio::io_service &io_service_;
81-
std::unique_ptr<boost::asio::ip::tcp::socket> socket_;
82-
std::promise<std::pair<boost::system::error_code, std::size_t>> read_promise_;
51+
boost::asio::io_service &io_service_;
52+
std::unique_ptr<boost::asio::ip::tcp::socket> socket_;
53+
std::promise<std::pair<boost::system::error_code, std::size_t>> read_promise_;
8354

8455
};
8556
} // namespace v2

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include <utility>
1313
#include <future>
1414
#include <boost/asio/ip/tcp.hpp>
15-
#include <boost/range/iterator_range.hpp>
1615

1716
namespace network {
1817
namespace http {
@@ -23,24 +22,23 @@ namespace network {
2322
*/
2423
class resolver_delegate {
2524

26-
resolver_delegate(const resolver_delegate &) = delete;
27-
resolver_delegate &operator = (const resolver_delegate &) = delete;
25+
resolver_delegate(const resolver_delegate &) = delete;
26+
resolver_delegate &operator = (const resolver_delegate &) = delete;
2827

2928
public:
3029

31-
typedef boost::asio::ip::tcp::resolver resolver;
32-
typedef resolver::iterator resolver_iterator;
33-
typedef boost::iterator_range<resolver_iterator> resolver_iterator_range;
34-
typedef std::function<void (const boost::system::error_code&,
35-
resolver_iterator_range)> callback_fn;
30+
typedef boost::asio::ip::tcp::resolver resolver;
31+
typedef resolver::iterator resolver_iterator;
32+
typedef std::function<void (const boost::system::error_code&,
33+
resolver_iterator)> callback_fn;
3634

37-
resolver_delegate() = default;
35+
resolver_delegate() = default;
3836

39-
virtual ~resolver_delegate() noexcept { }
37+
virtual ~resolver_delegate() noexcept { }
4038

41-
virtual void resolve(const std::string &host, std::uint16_t port, callback_fn callback) = 0;
39+
virtual void resolve(const std::string &host, std::uint16_t port, callback_fn callback) = 0;
4240

43-
virtual void clear_resolved_cache() = 0;
41+
virtual void clear_resolved_cache() = 0;
4442

4543
};
4644
} // namespace v2

http/test/v2/features/client/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
set(CPP-NETLIB_CLIENT_TESTS
77
async_resolver_test
8-
#normal_connection_test
8+
normal_connection_test
99
#client_test
1010
)
1111

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

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

1211
using namespace igloo;
@@ -25,15 +24,15 @@ Describe(async_resolver) {
2524
// maybe execute a script
2625

2726
resolver_->resolve("127.0.0.1", 80,
28-
[] (const boost::system::error_code &ec,
29-
http::async_resolver_delegate::resolver_iterator_range endpoints) {
30-
Assert::That(ec, Equals(boost::system::error_code()));
31-
for (auto endpoint : endpoints) {
32-
tcp::endpoint endpoint_ = endpoint;
33-
Assert::That(endpoint_.address().to_string(), Equals("127.0.0.1"));
34-
Assert::That(endpoint_.port(), Equals(80));
35-
}
36-
});
27+
[&] (const boost::system::error_code &ec,
28+
http::async_resolver_delegate::resolver_iterator endpoint_iterator) {
29+
Assert::That(ec, Equals(boost::system::error_code()));
30+
if (endpoint_iterator != http::async_resolver_delegate::resolver_iterator()) {
31+
tcp::endpoint endpoint = *endpoint_iterator;
32+
Assert::That(endpoint.address().to_string(), Equals("127.0.0.1"));
33+
Assert::That(endpoint.port(), Equals(80));
34+
}
35+
});
3736
io_service_->run_one();
3837
}
3938

0 commit comments

Comments
 (0)