【问题标题】:Call a boost function without callback调用不带回调的 boost 函数
【发布时间】:2019-02-12 07:15:00
【问题描述】:

我正在使用 boost-beast 库进行 websocket 连接。 您可以参考this example 了解了解发生了什么。我使用了相同的示例,但更改了一些内容:

  • 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() 和我的问题。任何建议或答案表示赞赏。

【问题讨论】:

  • session::on_write(ec, 0 /* field unused */); ?
  • @hare1039 请把它作为答案,这样我就可以结束这个问题了:)它有效。:)

标签: c++ websocket boost-beast beast beast-websockets


【解决方案1】:

您可以在参数中添加0 并将其标记为未使用

例如session::on_write(ec, 0 /* field unused */);

【讨论】:

    【解决方案2】:

    或者你可以给你的函数签名默认参数:

    void session::B(
        beast::error_code ec = {},
        std::size_t bytes_transferred = 0);
    

    【讨论】:

      猜你喜欢
      • 2018-10-06
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 2017-12-25
      相关资源
      最近更新 更多