userver
C++ Async Framework
Loading...
Searching...
No Matches
websocket_handler.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/server/websocket/websocket_handler.hpp
4
/// @brief @copybrief server::websocket::WebsocketHandlerBase
5
6
#
include
<
userver
/
components
/
component_config
.
hpp
>
7
#
include
<
userver
/
components
/
component_context
.
hpp
>
8
#
include
<
userver
/
server
/
handlers
/
http_handler_base
.
hpp
>
9
#
include
<
userver
/
server
/
websocket
/
server
.
hpp
>
10
11
USERVER_NAMESPACE_BEGIN
12
13
namespace
server::websocket {
14
15
/// @ingroup userver_components userver_http_handlers userver_base_classes
16
///
17
/// @brief Base class for WebSocket handler
18
///
19
/// ## Static options of server::websocket::WebsocketHandlerBase :
20
/// @include{doc} scripts/docs/en/components_schema/core/src/server/websocket/websocket_handler.md
21
///
22
/// Options inherited from @ref server::handlers::HttpHandlerBase :
23
/// @include{doc} scripts/docs/en/components_schema/core/src/server/handlers/http_handler_base.md
24
///
25
/// Options inherited from @ref server::handlers::HandlerBase :
26
/// @include{doc} scripts/docs/en/components_schema/core/src/server/handlers/handler_base.md
27
///
28
/// Options inherited from @ref components::ComponentBase :
29
/// @include{doc} scripts/docs/en/components_schema/core/src/components/impl/component_base.md
30
///
31
/// ## Example usage:
32
///
33
/// @snippet samples/websocket_service/main.cpp Websocket service sample - component
34
class
WebsocketHandlerBase
:
public
server::handlers::
HttpHandlerBase
{
35
public
:
36
WebsocketHandlerBase(
const
components
::ComponentConfig&,
const
components
::ComponentContext&);
37
38
/// @brief Websocket handler code belongs here.
39
virtual
void
Handle
(
WebSocketConnection
& websocket, server::
request
::RequestContext&)
const
= 0;
40
41
/// @brief If any code is required for handshake validation,
42
/// it goes here.
43
virtual
bool
44
HandleHandshake
(
const
server::
http
::HttpRequest&, server::
http
::HttpResponse&, server::
request
::RequestContext&)
45
const
{
46
return
true
;
47
}
48
49
/// @cond
50
void
WriteMetrics(utils::statistics::Writer& writer)
const
;
51
52
static
yaml_config
::Schema GetStaticConfigSchema();
53
/// @endcond
54
55
/// @brief If \a request isn't a websocket request the function handles a
56
/// request.
57
virtual
void
HandleNonWebsocketRequest
(
58
[[
maybe_unused
]]
const
server::
http
::HttpRequest& request,
59
[[
maybe_unused
]] server::
request
::RequestContext& context
60
)
const
{
61
LOG_WARNING
() <<
"Not a GET 'Upgrade: websocket' and 'Connection: Upgrade' request"
;
62
throw
server::handlers::
ClientError
();
63
}
64
65
private
:
66
std::string HandleRequestThrow(
const
server::
http
::HttpRequest& request, server::
request
::RequestContext& context)
67
const
override
;
68
69
websocket::Config config_;
70
mutable
Statistics stats_;
71
};
72
73
}
// namespace server::websocket
74
75
USERVER_NAMESPACE_END
userver
server
websocket
websocket_handler.hpp
Generated on Tue Jan 27 2026 16:45:59 for userver by
Doxygen
1.13.2