Kurlyk
Toggle main menu visibility
Loading...
Searching...
No Matches
websocket_independent_clients_example.cpp
Go to the documentation of this file.
1
#include <
kurlyk.hpp
>
2
#include <thread>
3
#include <chrono>
4
5
void
test_connect_disconnect
(
int
n) {
6
for
(
int
i = 0; i < n; ++i) {
7
KURLYK_PRINT
<<
"Iteration "
<< i + 1 <<
" of "
<< n << std::endl;
8
9
// Первый клиент: подключается, отправляет сообщение и отключается, затем повторяет.
10
std::thread client1_thread([]() {
11
std::this_thread::sleep_for(std::chrono::seconds(2));
12
kurlyk::WebSocketClient
client1(
"wss://echo-websocket.fly.dev/"
);
13
const
long
rate_limit_id = client1.
add_rate_limit_rps
(2);
14
client1.
on_event
([rate_limit_id](std::unique_ptr<kurlyk::WebSocketEventData> event) {
15
static
int
counter = 0;
16
switch
(event->event_type) {
17
case
kurlyk::WebSocketEventType::WS_OPEN
:
18
KURLYK_PRINT
<<
"Client 1: Connection opened"
<< std::endl;
19
event
->sender->send_message(
"Client 1 says hello!"
, rate_limit_id);
20
break
;
21
case
kurlyk::WebSocketEventType::WS_MESSAGE
:
22
KURLYK_PRINT
<<
"Client 1: Message received: "
<<
event
->message << std::endl;
23
event
->sender->send_message(
"Client 1 message #"
+ std::to_string(counter++), rate_limit_id);
24
break
;
25
case
kurlyk::WebSocketEventType::WS_CLOSE
:
26
KURLYK_PRINT
<<
"Client 1: Connection closed with status: "
<<
event
->status_code << std::endl;
27
break
;
28
case
kurlyk::WebSocketEventType::WS_ERROR
:
29
KURLYK_PRINT
<<
"Client 1: Error: "
<<
event
->error_code.message() << std::endl;
30
break
;
31
};
32
});
33
KURLYK_PRINT
<<
"Client 1: Connecting..."
<< std::endl;
34
client1.
connect_and_wait
();
35
std::this_thread::sleep_for(std::chrono::seconds(5));
// Дождаться приёма сообщения
36
KURLYK_PRINT
<<
"Client 1: Disconnecting..."
<< std::endl;
37
client1.
disconnect_and_wait
();
38
KURLYK_PRINT
<<
"Client 1: Session ended."
<< std::endl;
39
});
40
41
// Второй клиент: подключается, остаётся подключённым, периодически отправляет сообщения.
42
std::thread client2_thread([]() {
43
kurlyk::WebSocketClient
client2(
"wss://echo-websocket.fly.dev/"
);
44
const
long
rate_limit_id = client2.
add_rate_limit_rps
(2);
45
client2.
on_event
([rate_limit_id](std::unique_ptr<kurlyk::WebSocketEventData> event) {
46
static
int
counter = 0;
47
switch
(event->event_type) {
48
case
kurlyk::WebSocketEventType::WS_OPEN
:
49
KURLYK_PRINT
<<
"Client 2: Connection opened"
<< std::endl;
50
event
->sender->send_message(
"Client 2 says hello!"
, rate_limit_id);
51
break
;
52
case
kurlyk::WebSocketEventType::WS_MESSAGE
:
53
KURLYK_PRINT
<<
"Client 2: Message received: "
<<
event
->message << std::endl;
54
event
->sender->send_message(
"Client 2 message #"
+ std::to_string(counter++), rate_limit_id);
55
break
;
56
case
kurlyk::WebSocketEventType::WS_CLOSE
:
57
KURLYK_PRINT
<<
"Client 2: Connection closed with status: "
<<
event
->status_code << std::endl;
58
break
;
59
case
kurlyk::WebSocketEventType::WS_ERROR
:
60
KURLYK_PRINT
<<
"Client 2: Error: "
<<
event
->error_code.message() << std::endl;
61
break
;
62
};
63
});
64
KURLYK_PRINT
<<
"Client 2: Connecting..."
<< std::endl;
65
client2.
connect_and_wait
();
66
std::this_thread::sleep_for(std::chrono::seconds(10));
// Остаётся подключённым 10 секунд
67
KURLYK_PRINT
<<
"Client 2: Disconnecting..."
<< std::endl;
68
client2.
disconnect_and_wait
();
69
KURLYK_PRINT
<<
"Client 2: Session ended."
<< std::endl;
70
});
71
72
// Подождать завершения работы потоков клиентов перед повторной итерацией
73
client1_thread.join();
74
client2_thread.join();
75
std::this_thread::sleep_for(std::chrono::seconds(1));
76
}
77
}
78
79
int
main
() {
80
int
repeat_count = 3;
// Количество повторов цикла подключения/отключения
81
test_connect_disconnect
(repeat_count);
82
KURLYK_PRINT
<<
"All iterations completed."
<< std::endl;
83
return
0;
84
}
kurlyk::WebSocketClient
Public facade for managing WebSocket connections, events, and message sending.
Definition
WebSocketClient.hpp:16
kurlyk::WebSocketClient::on_event
void on_event(std::function< void(std::unique_ptr< WebSocketEventData >)> callback)
Sets a callback for WebSocket events.
Definition
WebSocketClient.hpp:94
kurlyk::WebSocketClient::disconnect_and_wait
bool disconnect_and_wait()
Disconnects from the WebSocket server, blocking until the disconnection completes.
Definition
WebSocketClient.hpp:181
kurlyk::WebSocketClient::add_rate_limit_rps
long add_rate_limit_rps(long requests_per_second)
Adds a rate limit based on Requests Per Second (RPS).
Definition
WebSocketClient.hpp:459
kurlyk::WebSocketClient::connect_and_wait
bool connect_and_wait()
Connects to the WebSocket server, blocking until the connection completes.
Definition
WebSocketClient.hpp:162
kurlyk.hpp
Main header file for the Kurlyk library, providing HTTP and WebSocket support.
kurlyk::WebSocketEventType::WS_ERROR
@ WS_ERROR
Error occurred.
Definition
enums.hpp:35
kurlyk::WebSocketEventType::WS_MESSAGE
@ WS_MESSAGE
Message received.
Definition
enums.hpp:33
kurlyk::WebSocketEventType::WS_CLOSE
@ WS_CLOSE
Connection closed.
Definition
enums.hpp:34
kurlyk::WebSocketEventType::WS_OPEN
@ WS_OPEN
Connection established.
Definition
enums.hpp:32
KURLYK_PRINT
#define KURLYK_PRINT
Definition
print_utils.hpp:8
test_connect_disconnect
void test_connect_disconnect(int n)
Definition
websocket_independent_clients_example.cpp:5
main
int main()
Definition
websocket_independent_clients_example.cpp:79
examples
websocket_independent_clients_example.cpp
Generated by
1.17.0