control_callback replaces ping_callback (API Change):

fix #322

The new callback is informed of all frame types including close.

Actions Required:

* Change calls to websocket::stream::ping_callback to use
  websocket::stream::control_callback

* Change user defined ping callbacks to have the new
  signature and adjust the callback definition appropriately.
This commit is contained in:
Vinnie Falco
2017-06-24 12:11:46 -07:00
parent 44824a4166
commit e7b01dc5c4
7 changed files with 110 additions and 60 deletions
+3 -3
View File
@@ -187,11 +187,11 @@ boost::asio::ip::tcp::socket sock{ios};
{
stream<boost::asio::ip::tcp::socket> ws{ios};
//[ws_snippet_17
ws.ping_callback(
[](bool is_pong, ping_data const& payload)
ws.control_callback(
[](frame_type kind, string_view payload)
{
// Do something with the payload
boost::ignore_unused(is_pong, payload);
boost::ignore_unused(kind, payload);
});
//]
+20 -15
View File
@@ -1656,15 +1656,17 @@ public:
c.close(ws, {close_code::going_away, "Going away"});
restart(error::closed);
bool once;
// send ping and message
bool pong = false;
ws.ping_callback(
[&](bool is_pong, ping_data const& payload)
once = false;
ws.control_callback(
[&](frame_type kind, string_view s)
{
BEAST_EXPECT(is_pong);
BEAST_EXPECT(! pong);
pong = true;
BEAST_EXPECT(payload == "");
BEAST_EXPECT(kind == frame_type::pong);
BEAST_EXPECT(! once);
once = true;
BEAST_EXPECT(s == "");
});
c.ping(ws, "");
ws.binary(true);
@@ -1673,18 +1675,21 @@ public:
// receive echoed message
multi_buffer db;
c.read(ws, db);
BEAST_EXPECT(pong == 1);
BEAST_EXPECT(once);
BEAST_EXPECT(ws.got_binary());
BEAST_EXPECT(to_string(db.data()) == "Hello");
}
ws.ping_callback({});
ws.control_callback({});
// send ping and fragmented message
ws.ping_callback(
[&](bool is_pong, ping_data const& payload)
once = false;
ws.control_callback(
[&](frame_type kind, string_view s)
{
BEAST_EXPECT(is_pong);
BEAST_EXPECT(payload == "payload");
BEAST_EXPECT(kind == frame_type::pong);
BEAST_EXPECT(! once);
once = true;
BEAST_EXPECT(s == "payload");
});
ws.ping("payload");
c.write_frame(ws, false, sbuf("Hello, "));
@@ -1694,10 +1699,10 @@ public:
// receive echoed message
multi_buffer db;
c.read(ws, db);
BEAST_EXPECT(pong == 1);
BEAST_EXPECT(once);
BEAST_EXPECT(to_string(db.data()) == "Hello, World!");
}
ws.ping_callback({});
ws.control_callback({});
// send pong
c.pong(ws, "");