Skip to content

Commit 7f58462

Browse files
committed
chore(TUTORIAL): generate md
1 parent 7aced0d commit 7f58462

1 file changed

Lines changed: 92 additions & 97 deletions

File tree

TUTORIAL.md

Lines changed: 92 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -142,27 +142,25 @@ TCP-соединение представляет собой двунаправ
142142

143143
Теперь давайте взглянем на следующий [исходный код](./code/simple_server.cpp):
144144

145-
146-
147145
```cpp
148146
#include <boost/asio.hpp>
149147

150148
int main() {
151-
std::uint16_t port = 15001;
152-
153-
boost::asio::io_context io_context;
154-
boost::asio::ip::udp::endpoint receiver(boost::asio::ip::udp::v4(), port);
155-
boost::asio::ip::udp::socket socket(io_context, receiver);
156-
157-
while (true) {
158-
char buffer[65536];
159-
boost::asio::ip::udp::endpoint sender;
160-
std::size_t bytes_transferred =
161-
socket.receive_from(boost::asio::buffer(buffer), sender);
162-
socket.send_to(boost::asio::buffer(buffer, bytes_transferred), sender);
163-
}
149+
std::uint16_t port = 15001;
150+
151+
boost::asio::io_context io_context;
152+
boost::asio::ip::udp::endpoint receiver(boost::asio::ip::udp::v4(), port);
153+
boost::asio::ip::udp::socket socket(io_context, receiver);
154+
155+
while (true) {
156+
char buffer[65536];
157+
boost::asio::ip::udp::endpoint sender;
158+
std::size_t bytes_transferred =
159+
socket.receive_from(boost::asio::buffer(buffer), sender);
160+
socket.send_to(boost::asio::buffer(buffer, bytes_transferred), sender);
161+
}
164162

165-
return 0;
163+
return 0;
166164
}
167165
```
168166

@@ -252,9 +250,9 @@ socket.async_receive_from(
252250
buffer,
253251
sender,
254252
[&](boost::system::error_code error, std::size_t bytes_transferred) {
255-
// Эта лямбда-функция будет вызвана после получения сообщения
256-
std::cout << "Message is received, message size is "
257-
<< bytes_transferred;
253+
// Эта лямбда-функция будет вызвана после получения сообщения
254+
std::cout << "Message is received, message size is "
255+
<< bytes_transferred;
258256
});
259257
```
260258
@@ -280,69 +278,67 @@ socket.async_receive_from(
280278
- Выводить полученные данные в стандартный вывод.
281279
- Закрывать соединение.
282280
283-
284281
Теперь давайте взглянем на полноценный пример такого сервера. Ниже мы все
285282
разложим по полочкам и посмотрим как все устроено. Как и прежде, мы
286-
пренебрегаем обработкой ошибок, чтобы код выглядел более понятным. Об
287-
обработке ошибок мы поговорим позже.
283+
пренебрегаем обработкой ошибок, чтобы код выглядел более понятным. Об обработке
284+
ошибок мы поговорим позже.
288285
289286
```cpp
290287
#include <boost/asio.hpp>
291-
292288
#include <iostream>
293289
#include <optional>
294290
295291
class session: public std::enable_shared_from_this<session> {
296-
public:
297-
session(boost::asio::ip::tcp::socket&& socket) :
298-
socket(std::move(socket)) {}
292+
public:
293+
session(boost::asio::ip::tcp::socket&& socket) :
294+
socket(std::move(socket)) {}
299295
300-
void start() {
301-
boost::asio::async_read_until(
302-
socket,
303-
streambuf,
304-
'\n',
305-
[self = shared_from_this()](
306-
boost::system::error_code error,
307-
std::size_t bytes_transferred) {
308-
std::cout << std::istream(&self->streambuf).rdbuf();
309-
});
310-
}
296+
void start() {
297+
boost::asio::async_read_until(
298+
socket,
299+
streambuf,
300+
'\n',
301+
[self = shared_from_this()](
302+
boost::system::error_code error,
303+
std::size_t bytes_transferred) {
304+
std::cout << std::istream(&self->streambuf).rdbuf();
305+
});
306+
}
311307
312-
private:
313-
boost::asio::ip::tcp::socket socket;
314-
boost::asio::streambuf streambuf;
308+
private:
309+
boost::asio::ip::tcp::socket socket;
310+
boost::asio::streambuf streambuf;
315311
};
316312
317313
class server {
318-
public:
319-
server(boost::asio::io_context& io_context, std::uint16_t port) :
320-
io_context(io_context),
321-
acceptor(
322-
io_context,
323-
boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)) {}
324-
325-
void async_accept() {
326-
socket.emplace(io_context);
327-
328-
acceptor.async_accept(*socket, [&](boost::system::error_code error) {
329-
std::make_shared<session>(std::move(*socket))->start();
330-
async_accept();
331-
});
332-
}
314+
public:
315+
server(boost::asio::io_context& io_context, std::uint16_t port) :
316+
io_context(io_context),
317+
acceptor(
318+
io_context,
319+
boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)) {}
320+
321+
void async_accept() {
322+
socket.emplace(io_context);
323+
324+
acceptor.async_accept(*socket, [&](boost::system::error_code error) {
325+
std::make_shared<session>(std::move(*socket))->start();
326+
async_accept();
327+
});
328+
}
333329
334-
private:
335-
boost::asio::io_context& io_context;
336-
boost::asio::ip::tcp::acceptor acceptor;
337-
std::optional<boost::asio::ip::tcp::socket> socket;
330+
private:
331+
boost::asio::io_context& io_context;
332+
boost::asio::ip::tcp::acceptor acceptor;
333+
std::optional<boost::asio::ip::tcp::socket> socket;
338334
};
339335
340336
int main() {
341-
boost::asio::io_context io_context;
342-
server srv(io_context, 15001);
343-
srv.async_accept();
344-
io_context.run();
345-
return 0;
337+
boost::asio::io_context io_context;
338+
server srv(io_context, 15001);
339+
srv.async_accept();
340+
io_context.run();
341+
return 0;
346342
}
347343
```
348344

@@ -358,11 +354,11 @@ int main() {
358354
`io_context.run()`. Давайте взглянем на функцию `main`:
359355
```cpp
360356
int main() {
361-
boost::asio::io_context io_context;
362-
server srv(io_context, 15001);
363-
srv.async_accept();
364-
io_context.run();
365-
return 0;
357+
boost::asio::io_context io_context;
358+
server srv(io_context, 15001);
359+
srv.async_accept();
360+
io_context.run();
361+
return 0;
366362
}
367363
```
368364

@@ -396,9 +392,9 @@ acceptor(io_context, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),
396392
Теперь давайте рассмотрим вызов функцию `async_accept` у `acceptor`:
397393
```cpp
398394
acceptor.async_accept(*socket, [&](boost::system::error_code error) {
399-
std::make_shared<session>(std::move(*socket))->start();
400-
async_accept();
401-
});
395+
std::make_shared<session>(std::move(*socket))->start();
396+
async_accept();
397+
});
402398
```
403399

404400
Словами это можно описать так: «Ожидай входящее соединение, а после того как
@@ -425,15 +421,15 @@ acceptor.async_accept(*socket, [&](boost::system::error_code error) {
425421
набор функций, связанный с соединением. Давайте рассмотрим функцию `start`:
426422
```cpp
427423
void start() {
428-
boost::asio::async_read_until(
429-
socket,
430-
streambuf,
431-
'\n',
432-
[self = shared_from_this()](
433-
boost::system::error_code error,
434-
std::size_t bytes_transferred) {
435-
std::cout << std::istream(&self->streambuf).rdbuf();
436-
});
424+
boost::asio::async_read_until(
425+
socket,
426+
streambuf,
427+
'\n',
428+
[self = shared_from_this()](
429+
boost::system::error_code error,
430+
std::size_t bytes_transferred) {
431+
std::cout << std::istream(&self->streambuf).rdbuf();
432+
});
437433
}
438434
```
439435

@@ -482,7 +478,6 @@ Hello asio!
482478
Boost.Asio. Поздравляем!
483479

484480

485-
486481
# Обработка ошибок
487482

488483

@@ -582,17 +577,17 @@ size)`.
582577
socket.async_receive(
583578
buffer,
584579
[&](boost::system::error_code error, std::size_t bytes_transferred) {
585-
if (!error) {
586-
// Асинхронная операция выполнена успешно.
587-
// Соединение все еще установлено
588-
} else if (error == boost::asio::error::eof) {
589-
// Соединение было разорвано.
590-
// В буфере по-прежнему хранятся полученные данные,
591-
// численно равные `bytes_transferred` (в байтах)
592-
} else {
593-
// Что-то пошло не так
594-
std::cerr << error.message() << "\n";
595-
}
580+
if (!error) {
581+
// Асинхронная операция выполнена успешно.
582+
// Соединение все еще установлено
583+
} else if (error == boost::asio::error::eof) {
584+
// Соединение было разорвано.
585+
// В буфере по-прежнему хранятся полученные данные,
586+
// численно равные `bytes_transferred` (в байтах)
587+
} else {
588+
// Что-то пошло не так
589+
std::cerr << error.message() << "\n";
590+
}
596591
});
597592
```
598593
@@ -640,7 +635,7 @@ std::cout << "Remote endpoint: " << endpoint << "\n";
640635

641636
Если запустить этот код, вы скорее всего увидите что-то на подобии этого:
642637
```sh
643-
Remote endpoint: 127.0.0.1:38529
638+
Remote endpoint: 127.0.0.1:38529
644639
```
645640

646641
Иногда вам может понадобиться отменить асинхронную операцию, которая была
@@ -1054,10 +1049,10 @@ class server {
10541049
srv.broadcast("We have a newcomer");
10551050
});
10561051

1057-
srv.on_leave([&] { srv.broadcast("We are one less"); })
1052+
srv.on_leave([&] { srv.broadcast("We are one less"); });
10581053

1059-
srv.on_message(
1060-
[&](message_type const& message) { srv.broadcast(message); })
1054+
srv.on_message(
1055+
[&](message_type const& message) { srv.broadcast(message); });
10611056
}
10621057

10631058
void start() {

0 commit comments

Comments
 (0)