Kurlyk
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
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) {
18 KURLYK_PRINT << "Client 1: Connection opened" << std::endl;
19 event->sender->send_message("Client 1 says hello!", rate_limit_id);
20 break;
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;
26 KURLYK_PRINT << "Client 1: Connection closed with status: " << event->status_code << std::endl;
27 break;
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) {
49 KURLYK_PRINT << "Client 2: Connection opened" << std::endl;
50 event->sender->send_message("Client 2 says hello!", rate_limit_id);
51 break;
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;
57 KURLYK_PRINT << "Client 2: Connection closed with status: " << event->status_code << std::endl;
58 break;
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
79int main() {
80 int repeat_count = 3; // Количество повторов цикла подключения/отключения
81 test_connect_disconnect(repeat_count);
82 KURLYK_PRINT << "All iterations completed." << std::endl;
83 return 0;
84}
Provides an interface for managing WebSocket connections, including configuration,...
void on_event(std::function< void(std::unique_ptr< WebSocketEventData >)> callback)
Sets a callback for WebSocket events.
bool disconnect_and_wait()
Disconnects from the WebSocket server, blocking until the disconnection completes.
long add_rate_limit_rps(long requests_per_second)
Adds a rate limit based on Requests Per Second (RPS).
bool connect_and_wait()
Connects to the WebSocket server, blocking until the connection completes.
Main header file for the Kurlyk library, providing HTTP and WebSocket support.
@ WS_ERROR
Error occurred.
Definition enums.hpp:35
@ WS_MESSAGE
Message received.
Definition enums.hpp:33
@ WS_CLOSE
Connection closed.
Definition enums.hpp:34
@ WS_OPEN
Connection established.
Definition enums.hpp:32
#define KURLYK_PRINT
void test_connect_disconnect(int n)