Orbit Framework
An ultra-modern, asynchronous, cross-platform C++ Web Framework.
Loading...
Searching...
No Matches
WebSocketConnection.hpp
Go to the documentation of this file.
1#pragma once
2#include <string>
3#include <functional>
4#include <vector>
5#include <cstdint>
6
7#include <zlib.h>
8
9namespace server {
10 class Connection; // Forward declaration
11}
12
13namespace http {
14namespace websocket {
15
16namespace detail {
17
22 bool fin;
23 uint8_t opcode;
24 bool masked;
26 uint8_t mask_key[4];
28};
29
42bool parse_frame_header(const std::vector<char>& buffer, FrameHeader& header);
43
49void unmask_payload(std::string& payload, const uint8_t mask_key[4]);
50
51} // namespace detail
52
57public:
58 explicit WebSocketConnection(server::Connection& underlying_connection, bool enable_deflate = false);
60
61 // User-facing API
62
67 void on_message(std::function<void(const std::string&)> handler);
68
73 void on_close(std::function<void()> handler);
74
79 void send(const std::string& message);
80
84 void close();
85
86 // Internal API called by Connection::handle_read when in WEBSOCKET state
87 void process_raw_data(std::vector<char>& buffer);
88
89private:
90 server::Connection& connection_;
91 std::function<void(const std::string&)> message_handler_;
92 std::function<void()> close_handler_;
93
94 bool is_closed_{false};
95
96 bool deflate_enabled_{false};
97 z_stream inflate_stream_{};
98 z_stream deflate_stream_{};
99 bool streams_initialized_{false};
100
101 void init_streams();
102 void cleanup_streams();
103 std::string deflate_payload(const std::string& payload);
104 std::string inflate_payload(const std::string& payload);
105};
106
107} // namespace websocket
108} // namespace http
Represents an active WebSocket connection.
Definition WebSocketConnection.hpp:56
void close()
Closes the WebSocket connection gracefully.
Definition WebSocketConnection.cpp:152
void on_message(std::function< void(const std::string &)> handler)
Registers a callback to be called when a message is received.
Definition WebSocketConnection.cpp:105
void process_raw_data(std::vector< char > &buffer)
Definition WebSocketConnection.cpp:223
~WebSocketConnection()
Definition WebSocketConnection.cpp:17
void send(const std::string &message)
Sends a text message over the WebSocket connection.
Definition WebSocketConnection.cpp:113
void on_close(std::function< void()> handler)
Registers a callback to be called when the connection is closed.
Definition WebSocketConnection.cpp:109
Represents an active client connection, handling request parsing and response writing.
Definition Connection.hpp:40
bool parse_frame_header(const std::vector< char > &buffer, FrameHeader &header)
Decodes an RFC 6455 frame header from the front of a buffer.
Definition WebSocketConnection.cpp:174
void unmask_payload(std::string &payload, const uint8_t mask_key[4])
Unmasks a frame payload in place using the frame's masking key.
Definition WebSocketConnection.cpp:168
Definition Http2Session.hpp:21
Definition Http2Session.hpp:17
Definition EventRouter.hpp:13
A decoded RFC 6455 frame header.
Definition WebSocketConnection.hpp:21
uint8_t opcode
Definition WebSocketConnection.hpp:23
bool masked
Definition WebSocketConnection.hpp:24
uint64_t payload_length
Definition WebSocketConnection.hpp:25
uint8_t mask_key[4]
Definition WebSocketConnection.hpp:26
size_t header_length
Definition WebSocketConnection.hpp:27
bool fin
Definition WebSocketConnection.hpp:22