1

Websocket 接続に boost-beast ライブラリを使用しています。何が起こっているのかを理解するために、この例を参照できます。同じ例を使用しましたが、いくつかの点を変更しました。

  • on_handshake(beast::error_code ec)を 3 つの関数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()と私の質問を確認してください。アドバイスや回答をいただければ幸いです。

4

2 に答える 2

0

または、関数シグネチャにデフォルトのパラメータを与えることができます:

void session::B(
    beast::error_code ec = {},
    std::size_t bytes_transferred = 0);
于 2019-02-13T21:05:52.057 に答える