Crow
Crow copied to clipboard
Add optional keep-alive mechanism to WS connections
#506 To be able to keepalive to WS connections, this PR adds a new callback to allow do something every x seconds while not receiving messages.
CROW_WEBSOCKET_ROUTE(app, "/ws")
.onaccept([&](const crow::request& req, void**) { .... })
.onopen([&](websocket::connection&) { .... })
.onmessage([&](websocket::connection& conn, const std::string& message, bool isbin) { .... })
.onclose([&](websocket::connection&, const std::string&) { .... })
.ontimeout([&](websocket::connection& conn, const std::string&) {
// conn.send_text("TimeOut"); or conn.close(); or
conn.send_ping("");
}, 5 /* every seconds */);
--- include/crow/websocket.h (before formatting)
+++ include/crow/websocket.h (after formatting)
@@ -261,7 +261,7 @@
do_read();
}
- void start_deadline(/*int timeout = 5*/)
+ void start_deadline(/*int timeout = 5*/)
{
cancel_deadline_timer();
@@ -711,7 +711,7 @@
std::function<void(crow::websocket::connection&, const std::string&, bool)> message_handler_;
std::function<void(crow::websocket::connection&, const std::string&)> close_handler_;
std::function<void(crow::websocket::connection&, const std::string&)> error_handler_;
- std::pair<std::function<void(crow::websocket::connection&, const std::string&)>,uint64_t> timeout_handler_;
+ std::pair<std::function<void(crow::websocket::connection&, const std::string&)>, uint64_t> timeout_handler_;
std::function<bool(const crow::request&, void**)> accept_handler_;
detail::task_timer task_timer_;
--- tests/unittest.cpp (before formatting)
+++ tests/unittest.cpp (after formatting)
@@ -2499,7 +2499,8 @@
.ontimeout([&](websocket::connection& conn, const std::string&) {
CROW_LOG_INFO << "Websocket Time Out";
conn.send_text("TimeOut");
- }, 2 /* seconds */)
+ },
+ 2 /* seconds */)
.onclose([&](websocket::connection&, const std::string&) {
CROW_LOG_INFO << "Closing websocket";
});
That's useful I think. What's the purpose of the string argument of the timeout handler? It's hardcoded to the string "timeout"?