Я пишу сервер с Boost, что-то довольно простое - принять сообщение XML, обработать, ответить. Но я сталкиваюсь с проблемой, когда говорю, когда прекратить читать.
Это то, что у меня есть сейчас: (_index - это буфер, в который считываются данные)
std::size_t tcp_connection::completion_condition(const boost::system::error_code& error,
std::size_t bytes_transferred)
{
int ret = -1;
std::istream is(&_index);
std::string s;
is >> s;
if (s.find("</end_tag>") != std::string.npos) ret = 0;
return ret;
}
void tcp_connection::start()
{
// Get index from server
boost::asio::async_read(_socket, _index, &(tcp_connection::completion_condition),
boost::bind(&tcp_connection::handle_read, shared_from_this(), boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
Это не компилируется, так как я должен определить завершение_статика как статическое, чтобы передать его async_read; и я не могу определить _index как статический, поскольку (очевидно) мне нужно, чтобы он был специфичным для класса.
Есть ли какой-нибудь другой способ задать параметры для завершения_условия? Как заставить его распознать конечный тег и вызвать обработчик чтения?