Skip to content

Conversation

paupuerta
Copy link

#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 */);

@crow-clang-format
Copy link

--- 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";
       });

@MichaelSB
Copy link
Contributor

That's useful I think. What's the purpose of the string argument of the timeout handler? It's hardcoded to the string "timeout"?

@gittiver gittiver added the feature Code based project improvement label Jan 29, 2024
@gittiver gittiver added the need_rebase PR needs rebase on master branch label Feb 6, 2024
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_;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe use std::chrono for timeout type?

@gittiver gittiver removed the need_rebase PR needs rebase on master branch label Oct 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature Code based project improvement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants