Вызов функции повышения без обратного вызова
Я использую библиотеку boost-beast для подключения к веб-сокету. Вы можете обратиться к этому примеру для понимания происходящего. Я использовал тот же пример, но изменил несколько вещей:
разделить
on_handshake(beast::error_code ec)
на три функцииA(beast::error_code ec)
,B(beast::error_code ec)
а такжеC(beast::error_code ec)
B()
отправляет двоичные данные иA()
а такжеC()
отправляем текст.A()
звонкиB()
как обратный вызов иB()
звонкиC()
как обратный звонок.
Теперь я застрял в точке, где я хочу сделать это:
void session::A(beast::error_code ec) {
if (ec)
return (fail(ec, "handshake"));
ws_.async_write(net::buffer(SOMETEXT),bind(&session::B, shared_from_this(), placeholders::_1));
}
void session::B(beast::error_code ec) {
if (ec)
return (fail(ec, "A_FAILED"));
if(condition1) {
ws_.binary(true);
ws_.async_write(net::buffer(SOMEBINARY),bind(&session::C, shared_from_this(), placeholders::_1));
} else {
session::on_write(ec,<WHAT SHOULD I WRITE HERE>);
}
}
void session::C(beast::error_code ec) {
if (ec)
return (fail(ec, "B_FAILED"));
ws_.binary(false);
ws_.async_write(net::buffer(SOMETEXT),bind(&session::on_write, shared_from_this(), placeholders::_1, placeholders::_2));
}
Вот функция чтения:
void
on_write(
beast::error_code ec,
std::size_t bytes_transferred)
{
boost::ignore_unused(bytes_transferred);
if(ec)
return fail(ec, "write");
// Read a message into our buffer
ws_.async_read(
buffer_,
std::bind(
&session::on_read,
shared_from_this(),
std::placeholders::_1,
std::placeholders::_2));
}
ВОПРОС:- Пожалуйста, проверьте функцию B()
и мой вопрос там. Любой совет или ответ приветствуется.
2 ответа
Вы можете просто поставить 0
в аргументе и пометить его как неиспользованный
например session::on_write(ec, 0 /* field unused */);
Или вы можете дать вашей функции подписи параметры по умолчанию:
void session::B(
beast::error_code ec = {},
std::size_t bytes_transferred = 0);