在没有回调的情况下调用升压函数
Call a boost function without callback
我正在使用 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));
}
这里是 Read 函数:
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()
和我的问题。任何建议或答案表示赞赏。
你可以在参数中加入一个 0
并将其标记为未使用
例如session::on_write(ec, 0 /* field unused */);
或者你可以给你的函数签名默认参数:
void session::B(
beast::error_code ec = {},
std::size_t bytes_transferred = 0);
我正在使用 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));
}
这里是 Read 函数:
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()
和我的问题。任何建议或答案表示赞赏。
你可以在参数中加入一个 0
并将其标记为未使用
例如session::on_write(ec, 0 /* field unused */);
或者你可以给你的函数签名默认参数:
void session::B(
beast::error_code ec = {},
std::size_t bytes_transferred = 0);