f7b842bbc7
Creates an example on how to connect using Socks4 based proxy. |
||
---|---|---|
.. | ||
main | ||
CMakeLists.txt | ||
README.md |
Supported Targets | ESP32 |
---|
Async request using ASIO
(See the README.md file in the upper level 'examples' directory for more information about examples.)
The application aims to show how to compose async operations using ASIO to build network protocols and operations.
Configure and Building example
This example doesn't require any configuration, just build it with
idf.py build
Async operations composition and automatic lifetime control
On this example we compose the operation by starting the next step in the chain inside the completion handler of the
previous operation. Also we pass the Connection
class itself as the parameter of its final handler to be owned by
the following operation. This is possible due to the control of lifetime by the usage of std::shared_ptr
.
The control of lifetime of the class, done by std::shared_ptr
usage, guarantee that the data will be available for
async operations until it's not needed any more. This makes necessary that all of the async operation class must start
its lifetime as a std::shared_ptr
due to the usage of std::enable_shared_from_this
.
User creates a shared_ptr──┐
of AddressResolution and │
ask for resolve. │
The handler for the ┌▼─────────────────────┐
complete operation is sent│ AddressResolution │ In the completion of resolve a connection is created.
└─────────────────┬────┘ AddressResolution is automaticly destroyed since it's
│ no longer needed
┌─▼────────────────────────────────────┐
│ Connection │
└──────┬───────────────────────────────┘
Http::Session is created once we have a Connection. │ Connection is passed to Http::Session that holds it │ avoiding it's destruction. │ ┌─▼───────────────────────────────┐ │ Http::Session │ └────────┬────────────────────────┘ After the HTTP request is │ sent the completion handler │ is called. │ └────►Completion Handler()
The previous diagram shows the process and the life span of each of the tasks in this examples. At each stage the object responsible for the last action inject itself to the completion handler of the next stage for reuse.