userver
C++ Async Framework
Loading...
Searching...
No Matches
samples/websocket_service/main.cpp
#include <
userver/utest/using_namespace_userver.hpp
>
#include <
userver/components/minimal_server_component_list.hpp
>
#include <
userver/server/handlers/websocket_handler.hpp
>
#include <
userver/utils/daemon_run.hpp
>
namespace
samples::websocket {
class
WebsocketsHandler final :
public
server::handlers::WebsocketHandlerBase
{
public
:
// `kName` is used as the component name in static config
static
constexpr
std::string_view kName =
"websocket-handler"
;
// Component is valid after construction and is able to accept requests
using
WebsocketHandlerBase::WebsocketHandlerBase;
void
Handle(
::websocket::WebSocketConnection
& chat,
server::request::RequestContext
&)
const override
{
::websocket::Message
message;
while
(!
engine::current_task::ShouldCancel
()) {
chat.
Recv
(message);
// throws on closed/dropped connection
if
(message.
close_status
) {
break
;
// explicit close if any
}
chat.
Send
(message);
// throws on closed/dropped connection
}
if
(message.
close_status
) {
chat.
Close
(*message.
close_status
);
}
}
};
}
// namespace samples::websocket
int
main(
int
argc,
char
* argv[]) {
const
auto
component_list =
components::MinimalServerComponentList
().
Append
<samples::websocket::WebsocketsHandler>();
return
utils::DaemonMain
(argc, argv, component_list);
}
Generated on Thu Apr 16 2026 13:29:58 for userver by
Doxygen
1.13.2