CppServer 1.0.5.0
C++ Server Library
Loading...
Searching...
No Matches
wss_server.h
Go to the documentation of this file.
1
9#ifndef CPPSERVER_HTTP_WSS_SERVER_H
10#define CPPSERVER_HTTP_WSS_SERVER_H
11
12#include "wss_session.h"
13
15
16namespace CppServer {
17namespace WS {
18
20
28class WSSServer : public HTTP::HTTPSServer, protected WebSocket
29{
30public:
31 using HTTPSServer::HTTPSServer;
32
33 WSSServer(const WSSServer&) = delete;
34 WSSServer(WSSServer&&) = delete;
35 virtual ~WSSServer() = default;
36
37 WSSServer& operator=(const WSSServer&) = delete;
39
40 // WebSocket connection methods
41 virtual bool CloseAll() { return CloseAll(0, nullptr, 0); }
42 virtual bool CloseAll(int status) { return CloseAll(status, nullptr, 0); }
43 virtual bool CloseAll(int status, const void* buffer, size_t size);
44 virtual bool CloseAll(int status, std::string_view text);
45
47 bool Multicast(const void* buffer, size_t size) override;
48
49 // WebSocket multicast text methods
50 size_t MulticastText(const void* buffer, size_t size) { std::scoped_lock locker(_ws_send_lock); PrepareSendFrame(WS_FIN | WS_TEXT, false, buffer, size); return Multicast(_ws_send_buffer.data(), _ws_send_buffer.size()); }
51 size_t MulticastText(std::string_view text) { std::scoped_lock locker(_ws_send_lock); PrepareSendFrame(WS_FIN | WS_TEXT, false, text.data(), text.size()); return Multicast(_ws_send_buffer.data(), _ws_send_buffer.size()); }
52
53 // WebSocket multicast binary methods
54 size_t MulticastBinary(const void* buffer, size_t size) { std::scoped_lock locker(_ws_send_lock); PrepareSendFrame(WS_FIN | WS_BINARY, false, buffer, size); return Multicast(_ws_send_buffer.data(), _ws_send_buffer.size()); }
55 size_t MulticastBinary(std::string_view text) { std::scoped_lock locker(_ws_send_lock); PrepareSendFrame(WS_FIN | WS_BINARY, false, text.data(), text.size()); return Multicast(_ws_send_buffer.data(), _ws_send_buffer.size()); }
56
57 // WebSocket multicast ping methods
58 size_t MulticastPing(const void* buffer, size_t size) { std::scoped_lock locker(_ws_send_lock); PrepareSendFrame(WS_FIN | WS_PING, false, buffer, size); return Multicast(_ws_send_buffer.data(), _ws_send_buffer.size()); }
59 size_t MulticastPing(std::string_view text) { std::scoped_lock locker(_ws_send_lock); PrepareSendFrame(WS_FIN | WS_PING, false, text.data(), text.size()); return Multicast(_ws_send_buffer.data(), _ws_send_buffer.size()); }
60
61protected:
62 std::shared_ptr<Asio::SSLSession> CreateSession(const std::shared_ptr<Asio::SSLServer>& server) override { return std::make_shared<WSSSession>(std::dynamic_pointer_cast<WSSServer>(server)); }
63};
64
67} // namespace WS
68} // namespace CppServer
69
70#endif // CPPSERVER_HTTP_WSS_SERVER_H
WebSocket secure server.
Definition wss_server.h:29
size_t MulticastText(const void *buffer, size_t size)
Definition wss_server.h:50
virtual ~WSSServer()=default
WSSServer & operator=(const WSSServer &)=delete
size_t MulticastPing(const void *buffer, size_t size)
Definition wss_server.h:58
size_t MulticastText(std::string_view text)
Definition wss_server.h:51
bool Multicast(const void *buffer, size_t size) override
Multicast data to all connected WebSocket sessions.
WSSServer & operator=(WSSServer &&)=delete
virtual bool CloseAll(int status)
Definition wss_server.h:42
virtual bool CloseAll()
Definition wss_server.h:41
size_t MulticastBinary(std::string_view text)
Definition wss_server.h:55
size_t MulticastBinary(const void *buffer, size_t size)
Definition wss_server.h:54
std::shared_ptr< Asio::SSLSession > CreateSession(const std::shared_ptr< Asio::SSLServer > &server) override
Definition wss_server.h:62
WSSServer(const WSSServer &)=delete
size_t MulticastPing(std::string_view text)
Definition wss_server.h:59
WSSServer(WSSServer &&)=delete
WebSocket utility class.
Definition ws.h:30
void PrepareSendFrame(uint8_t opcode, bool mask, const void *buffer, size_t size, int status=0)
Prepare WebSocket send frame.
Definition ws.cpp:212
static const uint8_t WS_TEXT
Text frame.
Definition ws.h:35
static const uint8_t WS_BINARY
Binary frame.
Definition ws.h:37
static const uint8_t WS_PING
Ping frame.
Definition ws.h:41
static const uint8_t WS_FIN
Final frame.
Definition ws.h:33
std::mutex _ws_send_lock
Send buffer lock.
Definition ws.h:189
std::vector< uint8_t > _ws_send_buffer
Send buffer.
Definition ws.h:191
HTTPS server definition.
C++ Server project definitions.
Definition asio.h:56
WebSocket secure session definition.