Вызов функции повышения без обратного вызова

Я использую библиотеку 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() и мой вопрос там. Любые советы или ответы приветствуются.


person RC0993    schedule 12.02.2019    source источник
comment
@hare1039 hare1039 Пожалуйста, укажите это как ответ, чтобы я мог закрыть вопрос :) Это сработало. :)   -  person RC0993    schedule 12.02.2019


Ответы (2)


Вы можете просто поставить 0 в аргументе и пометить его как неиспользуемый

e.g. session::on_write(ec, 0 /* field unused */);

person hare1039    schedule 12.02.2019

Или вы можете указать параметры по умолчанию для сигнатур функций:

void session::B(
    beast::error_code ec = {},
    std::size_t bytes_transferred = 0);
person Vinnie Falco    schedule 13.02.2019