diff --git a/include/crow/websocket.h b/include/crow/websocket.h index 8e5bd8731..d720144a6 100644 --- a/include/crow/websocket.h +++ b/include/crow/websocket.h @@ -239,6 +239,36 @@ namespace crow // NOTE: Already documented in "crow/app.h" { send_data(0x2, std::move(msg)); } + + /// Send a binary encoded message in blocking mode. + void send_binary_blocking(const std::string& msg, boost::system::error_code& ec) override + { + auto header = build_header(2, msg.size()); + std::vector buffer; + buffer.emplace_back(boost::asio::buffer(header)); + buffer.emplace_back(boost::asio::buffer(msg)); + + boost::asio::io_service service; + boost::asio::deadline_timer deadline_timer(service); + deadline_timer.expires_from_now(boost::posix_time::seconds(3)); + + deadline_timer.async_wait([&](const boost::system::error_code& err) + { + if(!err) + { + ec = boost::system::errc::make_error_code(boost::system::errc::timed_out); + adaptor_.shutdown_write(); + } + }); + + dispatch([&, this] + { + boost::asio::write(adaptor_.socket(), buffer, boost::asio::transfer_all(), ec); + deadline_timer.cancel(); + }); + + service.run(); + } /// Send a plaintext message. void send_text(std::string msg) override