Created
November 8, 2010 07:56
-
-
Save ngerakines/667463 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <cstdlib> | |
| #include <deque> | |
| #include <iostream> | |
| #include <boost/bind.hpp> | |
| #include <boost/asio.hpp> | |
| #include <boost/thread.hpp> | |
| using namespace std; | |
| using boost::asio::ip::tcp; | |
| namespace redis { | |
| class client { | |
| public: | |
| client(boost::asio::io_service& io_service) : resolver_(io_service), socket_(io_service) { | |
| tcp::resolver::query query("127.0.0.1", "6379"); | |
| std::ostream request_stream(&request_); | |
| request_stream << "INFO\r\n"; | |
| resolver_.async_resolve(query, boost::bind(&client::handle_resolve, this, boost::asio::placeholders::error, boost::asio::placeholders::iterator)); | |
| } | |
| void handle_resolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator) { | |
| if (!err) { | |
| tcp::endpoint endpoint = *endpoint_iterator; | |
| socket_.async_connect(endpoint, boost::bind(&client::handle_connect, this, boost::asio::placeholders::error, ++endpoint_iterator)); | |
| } else { | |
| std::cout << "Error: " << err.message() << "\n"; | |
| } | |
| } | |
| void handle_connect(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator) { | |
| if (!err) { | |
| boost::asio::async_write(socket_, request_, boost::bind(&client::handle_write_request, this, boost::asio::placeholders::error)); | |
| } else if (endpoint_iterator != tcp::resolver::iterator()) { | |
| socket_.close(); | |
| tcp::endpoint endpoint = *endpoint_iterator; | |
| socket_.async_connect(endpoint, boost::bind(&client::handle_connect, this, boost::asio::placeholders::error, ++endpoint_iterator)); | |
| } else { | |
| std::cout << "Error: " << err.message() << "\n"; | |
| } | |
| } | |
| void handle_write_request(const boost::system::error_code& err) { | |
| if (!err) { | |
| boost::asio::async_read_until(socket_, response_, "\r\n", boost::bind(&client::handle_read_status_line, this, boost::asio::placeholders::error)); | |
| } else { | |
| std::cout << "Error: " << err.message() << "\n"; | |
| } | |
| } | |
| void handle_read_status_line(const boost::system::error_code& err) { | |
| std::cout << &response_; | |
| } | |
| tcp::resolver resolver_; | |
| tcp::socket socket_; | |
| boost::asio::streambuf request_; | |
| boost::asio::streambuf response_; | |
| }; | |
| } | |
| int main () { | |
| boost::asio::io_service io_service; | |
| redis::client c(io_service); | |
| io_service.run(); | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment