Skip to content

Commit 31ceed9

Browse files
authored
Merge pull request #228 from boostorg/225-support-default-completion-tokens-in-redisconnection
Uses asio::deferred_t as default completion type.
2 parents 6cdbd64 + e7c1b9e commit 31ceed9

12 files changed

+53
-66
lines changed

README.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ auto co_main(config const& cfg) -> net::awaitable<void>
5454
response<std::string> resp;
5555

5656
// Executes the request.
57-
co_await conn->async_exec(req, resp, net::deferred);
57+
co_await conn->async_exec(req, resp);
5858
conn->cancel();
5959

6060
std::cout << "PING: " << std::get<0>(resp).value() << std::endl;
@@ -98,7 +98,7 @@ receiver(std::shared_ptr<connection> conn) -> net::awaitable<void>
9898
while (conn->will_reconnect()) {
9999
100100
// Reconnect to channels.
101-
co_await conn->async_exec(req, ignore, net::deferred);
101+
co_await conn->async_exec(req, ignore);
102102
103103
// Loop reading Redis pushes.
104104
for (;;) {
@@ -246,14 +246,14 @@ response<
246246
Where both are passed to `async_exec` as showed elsewhere
247247

248248
```cpp
249-
co_await conn->async_exec(req, resp, net::deferred);
249+
co_await conn->async_exec(req, resp);
250250
```
251251
252252
If the intention is to ignore responses altogether use `ignore`
253253
254254
```cpp
255255
// Ignores the response
256-
co_await conn->async_exec(req, ignore, net::deferred);
256+
co_await conn->async_exec(req, ignore);
257257
```
258258

259259
Responses that contain nested aggregates or heterogeneous data
@@ -296,7 +296,7 @@ response<
296296
...
297297
> resp;
298298

299-
co_await conn->async_exec(req, resp, net::deferred);
299+
co_await conn->async_exec(req, resp);
300300
```
301301
302302
Everything else stays pretty much the same.
@@ -336,7 +336,7 @@ response<
336336
exec_resp_type, // exec
337337
> resp;
338338

339-
co_await conn->async_exec(req, resp, net::deferred);
339+
co_await conn->async_exec(req, resp);
340340
```
341341
342342
For a complete example see cpp20_containers.cpp.
@@ -384,7 +384,7 @@ using other types
384384
```cpp
385385
// Receives any RESP3 simple or aggregate data type.
386386
boost::redis::generic_response resp;
387-
co_await conn->async_exec(req, resp, net::deferred);
387+
co_await conn->async_exec(req, resp);
388388
```
389389
390390
For example, suppose we want to retrieve a hash data structure

example/cpp20_chat_room.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66

77
#include <boost/redis/connection.hpp>
8-
#include <boost/asio/deferred.hpp>
98
#include <boost/asio/signal_set.hpp>
109
#include <boost/asio/co_spawn.hpp>
1110
#include <boost/asio/detached.hpp>
@@ -18,13 +17,12 @@
1817
#if defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
1918

2019
namespace asio = boost::asio;
21-
using stream_descriptor = asio::deferred_t::as_default_on_t<asio::posix::stream_descriptor>;
22-
using signal_set = asio::deferred_t::as_default_on_t<asio::signal_set>;
20+
using asio::posix::stream_descriptor;
21+
using asio::signal_set;
2322
using boost::asio::async_read_until;
2423
using boost::asio::awaitable;
2524
using boost::asio::co_spawn;
2625
using boost::asio::consign;
27-
using boost::asio::deferred;
2826
using boost::asio::detached;
2927
using boost::asio::dynamic_buffer;
3028
using boost::asio::redirect_error;
@@ -52,7 +50,7 @@ receiver(std::shared_ptr<connection> conn) -> awaitable<void>
5250
while (conn->will_reconnect()) {
5351

5452
// Subscribe to channels.
55-
co_await conn->async_exec(req, ignore, deferred);
53+
co_await conn->async_exec(req, ignore);
5654

5755
// Loop reading Redis push messages.
5856
for (error_code ec;;) {
@@ -76,7 +74,7 @@ auto publisher(std::shared_ptr<stream_descriptor> in, std::shared_ptr<connection
7674
auto n = co_await async_read_until(*in, dynamic_buffer(msg, 1024), "\n");
7775
request req;
7876
req.push("PUBLISH", "channel", msg);
79-
co_await conn->async_exec(req, ignore, deferred);
77+
co_await conn->async_exec(req, ignore);
8078
msg.erase(0, n);
8179
}
8280
}

example/cpp20_containers.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66

77
#include <boost/redis/connection.hpp>
8-
#include <boost/asio/deferred.hpp>
98
#include <boost/asio/detached.hpp>
109
#include <boost/asio/co_spawn.hpp>
1110
#include <map>
@@ -22,7 +21,6 @@ using boost::redis::ignore;
2221
using boost::redis::config;
2322
using boost::redis::connection;
2423
using boost::asio::awaitable;
25-
using boost::asio::deferred;
2624
using boost::asio::detached;
2725
using boost::asio::consign;
2826

@@ -51,7 +49,7 @@ auto store(std::shared_ptr<connection> conn) -> awaitable<void>
5149
req.push_range("RPUSH", "rpush-key", vec);
5250
req.push_range("HSET", "hset-key", map);
5351

54-
co_await conn->async_exec(req, ignore, deferred);
52+
co_await conn->async_exec(req, ignore);
5553
}
5654

5755
auto hgetall(std::shared_ptr<connection> conn) -> awaitable<void>
@@ -64,7 +62,7 @@ auto hgetall(std::shared_ptr<connection> conn) -> awaitable<void>
6462
response<std::map<std::string, std::string>> resp;
6563

6664
// Executes the request and reads the response.
67-
co_await conn->async_exec(req, resp, deferred);
65+
co_await conn->async_exec(req, resp);
6866

6967
print(std::get<0>(resp).value());
7068
}
@@ -85,7 +83,7 @@ auto transaction(std::shared_ptr<connection> conn) -> awaitable<void>
8583
response<std::optional<std::vector<int>>, std::optional<std::map<std::string, std::string>>> // exec
8684
> resp;
8785

88-
co_await conn->async_exec(req, resp, deferred);
86+
co_await conn->async_exec(req, resp);
8987

9088
print(std::get<0>(std::get<3>(resp).value()).value().value());
9189
print(std::get<1>(std::get<3>(resp).value()).value().value());

example/cpp20_echo_server.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66

77
#include <boost/redis/connection.hpp>
8-
#include <boost/asio/deferred.hpp>
98
#include <boost/asio/signal_set.hpp>
109
#include <boost/asio/detached.hpp>
1110
#include <boost/asio/redirect_error.hpp>
@@ -15,25 +14,26 @@
1514
#if defined(BOOST_ASIO_HAS_CO_AWAIT)
1615

1716
namespace asio = boost::asio;
18-
using tcp_socket = asio::deferred_t::as_default_on_t<asio::ip::tcp::socket>;
19-
using tcp_acceptor = asio::deferred_t::as_default_on_t<asio::ip::tcp::acceptor>;
20-
using signal_set = asio::deferred_t::as_default_on_t<asio::signal_set>;
17+
using boost::asio::signal_set;
2118
using boost::redis::request;
2219
using boost::redis::response;
2320
using boost::redis::config;
2421
using boost::system::error_code;
2522
using boost::redis::connection;
2623
using namespace std::chrono_literals;
2724

28-
auto echo_server_session(tcp_socket socket, std::shared_ptr<connection> conn) -> asio::awaitable<void>
25+
auto
26+
echo_server_session(
27+
asio::ip::tcp::socket socket,
28+
std::shared_ptr<connection> conn) -> asio::awaitable<void>
2929
{
3030
request req;
3131
response<std::string> resp;
3232

3333
for (std::string buffer;;) {
3434
auto n = co_await asio::async_read_until(socket, asio::dynamic_buffer(buffer, 1024), "\n");
3535
req.push("PING", buffer);
36-
co_await conn->async_exec(req, resp, asio::deferred);
36+
co_await conn->async_exec(req, resp);
3737
co_await asio::async_write(socket, asio::buffer(std::get<0>(resp).value()));
3838
std::get<0>(resp).value().clear();
3939
req.clear();
@@ -46,7 +46,7 @@ auto listener(std::shared_ptr<connection> conn) -> asio::awaitable<void>
4646
{
4747
try {
4848
auto ex = co_await asio::this_coro::executor;
49-
tcp_acceptor acc(ex, {asio::ip::tcp::v4(), 55555});
49+
asio::ip::tcp::acceptor acc(ex, {asio::ip::tcp::v4(), 55555});
5050
for (;;)
5151
asio::co_spawn(ex, echo_server_session(co_await acc.async_accept(), conn), asio::detached);
5252
} catch (std::exception const& e) {

example/cpp20_intro.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66

77
#include <boost/redis/connection.hpp>
8-
#include <boost/asio/deferred.hpp>
98
#include <boost/asio/co_spawn.hpp>
109
#include <boost/asio/detached.hpp>
1110
#include <boost/asio/consign.hpp>
@@ -33,7 +32,7 @@ auto co_main(config cfg) -> asio::awaitable<void>
3332
response<std::string> resp;
3433

3534
// Executes the request.
36-
co_await conn->async_exec(req, resp, asio::deferred);
35+
co_await conn->async_exec(req, resp);
3736
conn->cancel();
3837

3938
std::cout << "PING: " << std::get<0>(resp).value() << std::endl;

example/cpp20_intro_tls.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66

77
#include <boost/redis/connection.hpp>
8-
#include <boost/asio/deferred.hpp>
98
#include <boost/asio/use_awaitable.hpp>
109
#include <boost/asio/detached.hpp>
1110
#include <boost/asio/consign.hpp>
@@ -45,7 +44,7 @@ auto co_main(config cfg) -> asio::awaitable<void>
4544
conn->next_layer().set_verify_mode(asio::ssl::verify_peer);
4645
conn->next_layer().set_verify_callback(verify_certificate);
4746

48-
co_await conn->async_exec(req, resp, asio::deferred);
47+
co_await conn->async_exec(req, resp);
4948
conn->cancel();
5049

5150
std::cout << "Response: " << std::get<0>(resp).value() << std::endl;

example/cpp20_json.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66

77
#include <boost/redis/connection.hpp>
8-
#include <boost/asio/deferred.hpp>
98
#include <boost/asio/detached.hpp>
109
#include <boost/describe.hpp>
1110
#include <boost/asio/consign.hpp>
@@ -62,7 +61,7 @@ auto co_main(config cfg) -> asio::awaitable<void>
6261

6362
response<ignore_t, user> resp;
6463

65-
co_await conn->async_exec(req, resp, asio::deferred);
64+
co_await conn->async_exec(req, resp);
6665
conn->cancel();
6766

6867
// Prints the first ping

example/cpp20_protobuf.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
#include <boost/redis/connection.hpp>
88
#include <boost/redis/resp3/serialization.hpp>
9-
#include <boost/asio/deferred.hpp>
109
#include <boost/asio/co_spawn.hpp>
1110
#include <boost/asio/detached.hpp>
1211
#include <boost/asio/consign.hpp>
@@ -76,7 +75,7 @@ asio::awaitable<void> co_main(config cfg)
7675
response<ignore_t, person> resp;
7776

7877
// Sends the request and receives the response.
79-
co_await conn->async_exec(req, resp, asio::deferred);
78+
co_await conn->async_exec(req, resp);
8079
conn->cancel();
8180

8281
std::cout

example/cpp20_streams.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66

77
#include <boost/redis/connection.hpp>
8-
#include <boost/asio/deferred.hpp>
98
#include <boost/asio/co_spawn.hpp>
109
#include <boost/asio/detached.hpp>
1110
#include <boost/asio/consign.hpp>
@@ -26,7 +25,7 @@ using boost::redis::generic_response;
2625
using boost::redis::operation;
2726
using boost::redis::request;
2827
using boost::redis::connection;
29-
using signal_set = net::deferred_t::as_default_on_t<net::signal_set>;
28+
using net::signal_set;
3029

3130
auto stream_reader(std::shared_ptr<connection> conn) -> net::awaitable<void>
3231
{
@@ -39,7 +38,7 @@ auto stream_reader(std::shared_ptr<connection> conn) -> net::awaitable<void>
3938

4039
for (;;) {
4140
req.push("XREAD", "BLOCK", "0", "STREAMS", "test-topic", stream_id);
42-
co_await conn->async_exec(req, resp, net::deferred);
41+
co_await conn->async_exec(req, resp);
4342

4443
//std::cout << "Response: ";
4544
//for (auto i = 0UL; i < resp->size(); ++i) {

example/cpp20_subscriber.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <boost/redis/logger.hpp>
99
#include <boost/asio/awaitable.hpp>
1010
#include <boost/asio/use_awaitable.hpp>
11-
#include <boost/asio/deferred.hpp>
1211
#include <boost/asio/co_spawn.hpp>
1312
#include <boost/asio/detached.hpp>
1413
#include <boost/asio/consign.hpp>
@@ -29,7 +28,7 @@ using boost::redis::ignore;
2928
using boost::redis::error;
3029
using boost::system::error_code;
3130
using boost::redis::connection;
32-
using signal_set = asio::deferred_t::as_default_on_t<asio::signal_set>;
31+
using asio::signal_set;
3332

3433
/* This example will subscribe and read pushes indefinitely.
3534
*
@@ -61,7 +60,7 @@ receiver(std::shared_ptr<connection> conn) -> asio::awaitable<void>
6160
while (conn->will_reconnect()) {
6261

6362
// Reconnect to the channels.
64-
co_await conn->async_exec(req, ignore, asio::deferred);
63+
co_await conn->async_exec(req, ignore);
6564

6665
// Loop reading Redis pushs messages.
6766
for (error_code ec;;) {

include/boost/redis/adapter/detail/adapters.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include <charconv>
3030

3131
// See https://stackoverflow.com/a/31658120/1077832
32-
#include<ciso646>
3332
#ifdef _LIBCPP_VERSION
3433
#else
3534
#include <cstdlib>

0 commit comments

Comments
 (0)