/* Copyright (c) 2018-2022 Marcelo Zimbres Silva (mzimbres@gmail.com) * * Distributed under the Boost Software License, Version 1.0. (See * accompanying file LICENSE.txt) */ #include #include #include #include #include #include #if defined(BOOST_ASIO_HAS_CO_AWAIT) namespace asio = boost::asio; using boost::redis::request; using boost::redis::response; using boost::redis::config; using boost::redis::connection; using namespace std::chrono_literals; // Called from the main function (see main.cpp) auto co_main(config cfg) -> asio::awaitable { auto conn = std::make_shared(co_await asio::this_coro::executor); conn->async_run(cfg, asio::consign(asio::detached, conn)); // A request containing only a ping command. request req; req.push("PING", "Hello world"); // Response where the PONG response will be stored. response resp; // Executes the request with a timeout. If the server is down, // async_exec will wait until it's back again, so it, // may suspend for a long time. // For this reason, it's good practice to set a timeout to requests with cancel_after. // If the request hasn't completed after 10 seconds, an exception will be thrown. co_await conn->async_exec(req, resp, asio::cancel_after(10s)); conn->cancel(); std::cout << "PING: " << std::get<0>(resp).value() << std::endl; } #endif // defined(BOOST_ASIO_HAS_CO_AWAIT)