23#include <system_error>
36template<ByteBuffer Buffer>
38 std::cout <<
"Sending " << buffer.size() <<
" bytes from buffer\n";
40 const void* ptr = buffer.data();
45 std::cout <<
"=== ByteBuffer Concept ===\n";
48 std::vector<uint8_t> vec_buffer = {1, 2, 3, 4, 5};
52 std::string str_buffer =
"Hello, Network!";
56 std::array<uint8_t, 4> arr_buffer = {0xDE, 0xAD, 0xBE, 0xEF};
74template<MutableByteBuffer Buffer>
76 buffer.resize(expected_size);
77 std::cout <<
"Buffer resized to " << buffer.size() <<
" bytes\n";
79 for (std::size_t i = 0; i < buffer.size(); ++i) {
80 static_cast<uint8_t*
>(buffer.data())[i] =
static_cast<uint8_t
>(i % 256);
85 std::cout <<
"=== MutableByteBuffer Concept ===\n";
87 std::vector<uint8_t> buffer;
89 std::cout <<
"Received data, first byte: " <<
static_cast<int>(buffer[0]) <<
"\n";
111 template<DataReceiveHandler Handler>
114 std::cout <<
"Data handler registered\n";
121 template<ErrorHandler Handler>
124 std::cout <<
"Error handler registered\n";
131 template<ConnectionHandler Handler>
134 std::cout <<
"Connect handler registered\n";
141 template<RetryCallback Handler>
144 std::cout <<
"Retry handler registered\n";
149 std::cout <<
"\nSimulating events:\n";
152 std::cout <<
" -> Connection event: ";
157 std::vector<uint8_t> data = {72, 101, 108, 108, 111};
158 std::cout <<
" -> Data event: ";
163 std::cout <<
" -> Retry event: ";
168 std::cout <<
" -> Error event: ";
169 error_handler_(std::make_error_code(std::errc::connection_refused));
181 std::cout <<
"=== Callback Concepts ===\n";
186 client.on_data([](
const std::vector<uint8_t>& data) {
187 std::cout <<
"Received " << data.size() <<
" bytes\n";
190 client.on_error([](std::error_code ec) {
191 std::cout <<
"Error: " << ec.message() <<
"\n";
194 client.on_connect([]() {
195 std::cout <<
"Connected!\n";
198 client.on_retry([](std::size_t attempt) {
199 std::cout <<
"Retry attempt #" << attempt <<
"\n";
202 client.simulate_events();
224 std::cout <<
"Mock: sent " << data.size() <<
" bytes\n";
229 std::cout <<
"Mock: client stopped\n";
234 std::cout <<
"Mock: client connected\n";
245template<NetworkClient Client>
247 if (!client.is_connected()) {
248 std::cout <<
"Client not connected, cannot send\n";
252 std::vector<uint8_t> data(message.begin(), message.end());
253 client.send_packet(std::move(data));
257 std::cout <<
"=== NetworkClient Concept ===\n";
269 client.stop_client();
286 for (
auto&
byte : data) {
305template<ReversibleDataTransformer T>
307 std::cout <<
"Original: ";
308 for (
auto b : data) std::cout << static_cast<char>(b);
311 transformer.transform(data);
312 std::cout <<
"Transformed: ";
313 for (
auto b : data) std::cout << std::hex << static_cast<int>(b) <<
" ";
314 std::cout << std::dec <<
"\n";
316 transformer.reverse_transform(data);
317 std::cout <<
"Restored: ";
318 for (
auto b : data) std::cout << static_cast<char>(b);
323 std::cout <<
"=== DataTransformer Concept ===\n";
326 std::vector<uint8_t> data = {
'H',
'e',
'l',
'l',
'o'};
343 auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(duration);
344 std::cout <<
"Timeout set to " << ms.count() <<
" milliseconds\n";
348 std::cout <<
"=== Duration Concept ===\n";
393 std::cout <<
"==============================================\n";
394 std::cout <<
"Network System - C++20 Concepts Example\n";
395 std::cout <<
"==============================================\n\n";
404 std::cout <<
"==============================================\n";
405 std::cout <<
"All examples completed successfully!\n";
406 std::cout <<
"==============================================\n";
A client class demonstrating concept-constrained callbacks.
std::function< void(const std::vector< uint8_t > &)> data_handler_
void on_error(Handler &&handler)
Set error handler.
void on_retry(Handler &&handler)
Set retry callback.
std::function< void()> connect_handler_
std::function< void(std::size_t)> retry_handler_
std::function< void(std::error_code)> error_handler_
void on_connect(Handler &&handler)
Set connection handler.
void on_data(Handler &&handler)
Set data receive handler.
A mock client satisfying NetworkClient concept.
bool is_connected() const
void send_packet(std::vector< uint8_t > data)
Unified header for all C++20 concepts in network_system.
void send_buffer(const Buffer &buffer)
Send data from any buffer type satisfying ByteBuffer concept.
void set_timeout(D duration)
Set a timeout using any duration type.
void demonstrate_network_client()
void demonstrate_mutable_buffer()
void demonstrate_transformer()
void demonstrate_callbacks()
void demonstrate_duration()
void demonstrate_byte_buffer()
void receive_into(Buffer &buffer, std::size_t expected_size)
Receive data into a resizable buffer.
void process_bidirectional(T &transformer, std::vector< uint8_t > &data)
Apply a reversible transformer to data.
void use_client(Client &client, const std::string &message)
Generic function that works with any NetworkClient.
C++20 concepts for compile-time type validation in network_system.