Unify response reading to avoid duplicate code.

This commit is contained in:
Christoph Heiss 2018-02-26 10:12:48 +01:00
parent 1233e6eb9d
commit d722892ca6

View file

@ -121,19 +121,7 @@ public:
asio::write(socket_, asio::buffer(command), error_code); asio::write(socket_, asio::buffer(command), error_code);
check_asio_error(error_code); check_asio_error(error_code);
RespParser parser; return receive_response();
asio::streambuf buffer;
bool cont{false};
do {
buffer.consume(buffer.size());
asio::read_until(socket_, buffer, '\n');
check_asio_error(error_code);
std::istream stream{&buffer};
cont = parser.parse(stream);
} while (cont);
return parser.result();
} }
std::vector<Result> send_batch(const std::vector<std::string>& commands) std::vector<Result> send_batch(const std::vector<std::string>& commands)
@ -146,10 +134,22 @@ public:
asio::write(socket_, asio::buffer(raw_commands), error_code); asio::write(socket_, asio::buffer(raw_commands), error_code);
check_asio_error(error_code); check_asio_error(error_code);
std::vector<Result> results; return receive_responses(commands.size());
asio::streambuf buffer; }
for (size_t i{}; i < commands.size(); i++) { private:
Result receive_response()
{
return receive_responses(1).front();
}
std::vector<Result> receive_responses(size_t num)
{
asio::error_code error_code;
asio::streambuf buffer;
std::vector<Result> results;
for (size_t i{}; i < num; i++) {
RespParser parser; RespParser parser;
bool cont{false}; bool cont{false};
@ -162,13 +162,12 @@ public:
cont = parser.parse(stream); cont = parser.parse(stream);
} while (cont); } while (cont);
results.push_back(std::move(parser.result())); results.push_back(parser.result());
} }
return results; return results;
} }
private:
const std::string host_; const std::string host_;
const std::string port_; const std::string port_;
const size_t timeout_; const size_t timeout_;