рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!
рдореИрдВ рдЬреЙрди рдЯреЛрд░рдЬреЛ рдХреА рдкреБрд╕реНрддрдХ Boost.Asio C ++ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред
рд╕рд╛рдордЧреНрд░реА:
рдпрд╣ рдЕрдзреНрдпрд╛рдп Boost.Asio рдХреЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╣рд░ рджрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛:
- рдпрджрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ Boost.Asio рдЗрд╕рдореЗрдВ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░реЗрдЧрд╛ред
- рдпрджрд┐ рдЖрдкрдХреЛ рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рддреЛ рджреЗрдЦреЗрдВ рдХрд┐ Boost.Asio рдЖрдкрдХреЛ рдХреНрдпрд╛ рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
- рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ OC рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рджреЗрдЦреЗрдВ рдХрд┐ Boost.Asio рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╣реИрдВ
Asio рдмрдирд╛рдо Boost.Asio
Boost.Asio рд▓реЗрдЦрдХреЛрдВ рдиреЗ рднреА Asio рдХреЛ рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдХреАред рдЖрдк рдЗрд╕реЗ рдЖрд╕рд┐рдпреЛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреЛ рд╕реНрд╡рд╛рджреЛрдВ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЖрд╕рд┐рдпреЛ (рдмреВрд╕реНрдЯ рдирд╣реАрдВ) рдФрд░ рдмреВрд╕реНрдЯ.рдПрд╕рд┐рдпреЛред рд▓реЗрдЦрдХреЛрдВ рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдЕрдкрдбреЗрдЯ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрд╕рд┐рдпреЛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ, рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдмреВрд╕реНрдЯ рд╡рд┐рддрд░рдг рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЕрдВрддрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
- Asio рдХреЛ
asio::
рдХреЗ рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ asio::
, рдЬрдмрдХрд┐ Boost.Asio рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ boost::asio::
asio.hpp
рдореЗрдВ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ asio.hpp
рдФрд░ boost/asio.hpp
рдореЗрдВ boost/asio.hpp
рд╣реИ- рдЖрд╕рд┐рдпреЛ рдХреЗ рдкрд╛рд╕ рд╕реВрддреНрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рд╣реИ (
boost::thread
) - Asio рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (
asio::error_code
boost::system::error_cod
рдмрдЬрд╛рдп boost::system::error_cod
рдФрд░ asio::system_error
boost::system::system_error
рдмрдЬрд╛рдп boost::system::system_error
)
рдЖрдк
рдпрд╣рд╛рдБ рдЖрд╕рд┐рдпреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдЖрдкрдХреЛ рдЦреБрдж рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдкрдХреЛ рдХреМрди рд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╕рдВрдж рд╣реИ; рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ Boost.Asio рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдЕрдкрдиреА рдкрд╕рдВрдж рдмрдирд╛рддреЗ рд╕рдордп рдХреБрдЫ рдмрд╛рддреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
- Asio рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг Boost.Asio рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╕рд╛рдордиреЗ рдЖрддреЗ рд╣реИрдВ (рдирдП рдмреВрд╕реНрдЯ рд╡рд┐рддрд░рдг рдмрд╣реБрдд рдХрдо рд╣реА рдирд┐рдХрд▓рддреЗ рд╣реИрдВ)
- Asio рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╣реЗрдбрд░ рд╣реИ (рдЬрдмрдХрд┐ Boost.Asio рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЕрдиреНрдп рдмреВрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕рдВрдХрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ)
- Asio рдФрд░ Boost.Asio рджреЛрдиреЛрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдирдП Asio рд░рд┐рд▓реАрдЬрд╝ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ Boost.Asio рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдЕрдиреНрдп рдмреВрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рд╣реЛрдЧреАред
рдЖрдк рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ Asio рдФрд░ Boost.Asio рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЖрд╕рд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмреВрд╕реНрдЯ.рдПрд╕рд┐рдпреЛ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдбрд┐рдмрдЧрд┐рдВрдЧ
рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ рдмреНрд▓реЙрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдмрд╕ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╣рд╛рдВ рдпрд╣ рд╣реБрдЖ рд╣реИ рдЙрд╕рдХреА рдПрдХ рддрд╕реНрд╡реАрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрд╛ рдорддрд▓рдм рдЕрдиреБрдХреНрд░рдорд┐рдХ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдЖрдк рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдИрд╡реЗрдВрдЯреНрд╕ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдШрдЯрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрдХрдбрд╝рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред
рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдХреЛрд░рдЯрд╛рдЗрди рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдЬрдм рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ Boost.Asio рдЖрдкрдХреЛ рдорджрдж рдХреЗ рд▓рд┐рдП рдЙрдзрд╛рд░ рджреЗрдЧрд╛; Boost.Asio рдЖрдкрдХреЛ рд╣реИрдВрдбрд▓рд░ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрджрд┐
BOOST_ASIO_ENABLE_HANDLER_TRACKING
рдореИрдХреНрд░реЛ рдХреЛ
BOOST_ASIO_ENABLE_HANDLER_TRACKING
ред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ Boost.Asio рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╕рдордп, рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдФрд░ рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╛рдкреНрддрд┐ рд╣реИрдВрдбрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реВрдЪрдирд╛ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╣реИрдВрдбрд▓рд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА
рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред Boost.Asio рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдирд┐рдореНрди рджреЗрддрд╛ рд╣реИ:
@asio|<timestamp>|<action>|<description>.
рдкрд╣рд▓рд╛ рдЯреИрдЧ рд╣рдореЗрд╢рд╛
@asio
, рдЖрдк рдЗрд╕реЗ Boost.Asio рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЕрдиреНрдп рд╕реНрд░реЛрдд рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рд╕реНрдЯреНрд░реАрдо (
std::cerr
рдмрд░рд╛рдмрд░) рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
timestamp
рдЙрджрд╛рд╣рд░рдг 1 рдЬрдирд╡рд░реА, 1970 рдпреВрдЯреАрд╕реА рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕реЗрдХрдВрдб рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ
action
рдЙрджрд╛рд╣рд░рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
>n
: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдо рд╣реИрдВрдбрд▓рд░ рдХреЛ рдирдВрдмрд░ n рдХреЗ рд╕рд╛рде рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВред description
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдХреЛ рджреА рдЧрдИ рджрд▓реАрд▓реЗрдВ рд╣реИрдВред<n
: рд╣реИрдВрдбрд▓рд░ рдирдВрдмрд░ n рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред!n
рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдо рдЕрдкрд╡рд╛рдж рдХреЗ рдХрд╛рд░рдг рд╣реИрдВрдбрд▓рд░ n рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВред~n
: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдирдВрдмрд░ n рдХреЗ рд╕рд╛рде рд╣реИрдВрдбрд▓рд░ рдмрд┐рдирд╛ рдХреЙрд▓ рдХреЗ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ; рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ io_service
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрд╣реБрдд рдЬрд▓реНрджреА рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (n рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ)редn*m
: рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм n рд╣реИрдВрдбрд▓рд░ рдЕрдВрддрд┐рдо рд╣реИрдВрдбрд▓рд░ рд╕рдВрдЦреНрдпрд╛ m рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдмрдирд╛рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдХреЗ рдмрд╛рдж, рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди description
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдВрддрд┐рдо рд╣реИрдВрдбрд▓рд░ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдк >m(start)
рдФрд░ <m(end)
редn
: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рдВрдЦреНрдпрд╛ n рдХреЗ рд╕рд╛рде рдПрдХ рд╣реИрдВрдбрд▓рд░ рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ description
рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдЬреЛ close
рдпрд╛ cancel
рдСрдкрд░реЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдЖрдорддреМрд░ рдкрд░, рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрдм рднреА n = 0, рддрдм рд╕рднреА рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмрд╛рд╣рд░ (рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ) рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░, рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓рд╛ рдСрдкрд░реЗрд╢рди (рдСрдкрд░реЗрд╢рди) рдХрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ рдЖрдк рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕рд┐рдЧреНрдирд▓ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рддрд░рд╣ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП
!n
рдФрд░
~n
, рдЬреЛ рддрдм рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрд╛, рдЗрд╕рд▓рд┐рдП рдЕрдкрд╡рд╛рдж рдХреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЕрдВрддрд┐рдо рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╕рдордп рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдиреЗ рд╢рд╛рдпрдж
io_service
рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмрд╣реБрдд рдЬрд▓реНрдж рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╕рднреА рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЙрджрд╛рд╣рд░рдг
рдЖрдкрдХреЛ рд╕рд╣рд╛рдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдзреНрдпрд╛рдп 6 рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред
boost/asio.hpp
рдЪрд╛рд▓реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд
#define
рдЬреЛрдбрд╝рдирд╛
boost/asio.hpp
:
#define BOOST_ASIO_ENABLE_HANDLER_TRACKING #include <boost/asio.hpp> ...
рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдкрд╣рд▓реА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рддреЛ рд╣рдо рдХрдВрд╕реЛрд▓ рдХреЛ рдбрдВрдк рднреА рдХрд░реЗрдВрдЧреЗред рдирд┐рд╖реНрдХрд░реНрд╖ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
@asio|1355603116.602867|0*1|socket@008D4EF8.async_connect @asio|1355603116.604867|>1|ec=system:0 @asio|1355603116.604867|1*2|socket@008D4EF8.async_send @asio|1355603116.604867|<1| @asio|1355603116.604867|>2|ec=system:0,bytes_transferred=11 @asio|1355603116.604867|2*3|socket@008D4EF8.async_receive @asio|1355603116.604867|<2| @asio|1355603116.605867|>3|ec=system:0,bytes_transferred=9 @asio|1355603116.605867|3*4|io_service@008D4BC8.post @asio|1355603116.605867|<3| @asio|1355603116.605867|>4| John logged in @asio|1355603116.606867|4*5|io_service@008D4BC8.post @asio|1355603116.606867|<4| @asio|1355603116.606867|>5| @asio|1355603116.606867|5*6|socket@008D4EF8.async_send @asio|1355603116.606867|<5| @asio|1355603116.606867|>6|ec=system:0,bytes_transferred=12 @asio|1355603116.606867|6*7|socket@008D4EF8.async_receive @asio|1355603116.606867|<6| @asio|1355603116.606867|>7|ec=system:0,bytes_transferred=14 @asio|1355603116.606867|7*8|io_service@008D4BC8.post @asio|1355603116.607867|<7| @asio|1355603116.607867|>8| John, new client list: John
рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рджреЗрдВ:
- рд╣рдо
async_connect
рдкрд░рд┐рдЪрдп async_connect
, рдЬреЛ рд╣реИрдВрдбрд▓рд░ 1 рдмрдирд╛рддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд░ рдХреЛрдИ talk_to_svr::step
рдкреНрд░рдХреНрд░рд┐рдпрд╛ talk_to_svr::step
) - рд╣реИрдВрдбрд▓рд░ 1 рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕рд░реНрд╡рд░ рдХреЗ рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд╛рдж)
- рд╣реИрдВрдбрд▓рд░ 1 рдХреЛ
async_send
рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рд╣реИрдВрдбрд▓рд░ 2 рдмрдирд╛рддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЙрдЧрд┐рди рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ) - рд╣реИрдВрдбрд▓рд░ 1 рдмрдВрдж
- рд╣реИрдВрдбрд▓рд░ 2 рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 11 рдмрд╛рдЗрдЯреНрд╕ рднреЗрдЬрддрд╛ рд╣реИ (
login John
) - рд╣реИрдВрдбрд▓рд░ 2 рдХреЛ
async_receive
рдХрд╣рддрд╛ рд╣реИ, рдЬреЛ рд╣реИрдВрдбрд▓рд░ 3 рдмрдирд╛рддрд╛ рд╣реИ (рд╣рдо рдЕрдкрдиреЗ рд▓реЙрдЧрд┐рди рд╕рдВрджреЗрд╢ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ) - рд╣реИрдВрдбрд▓рд░ 2 рдмрдВрдж
- рд╣реИрдВрдбрд▓рд░ 3 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 9 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (
login ok
) - рд╣реИрдВрдбрд▓рд░ 3
on_answer_from_server
(рдЬрд╣рд╛рдВ рд╣реИрдВрдбрд▓рд░ 4 рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ - рд╣реИрдВрдбрд▓рд░ 3 рдмрдВрдж
- рд╣реИрдВрдбрд▓рд░ 4 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рддрдм
John logged in
рдбрдВрдк John logged in
рдХреЛ рд▓рд┐рдЦрддрд╛ John logged in
- рд╣реИрдВрдбрд▓рд░ 4 рдПрдХ рдФрд░
step
(рд╣реИрдВрдбрд▓рд░ 5) рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ ask_clients
- рд╣реИрдВрдбрд▓рд░ 4 рдмрдВрдж
- рд╣реИрдВрдбрд▓рд░ 5 рдЦреБрд▓рддрд╛ рд╣реИ
- рд╣реИрдВрдбрд▓рд░ 5,
async_send
ask_clients
, рд╣реИрдВрдбрд▓рд░ 6 рдмрдирд╛рддрд╛ рд╣реИ - рд╣реИрдВрдбрд▓рд░ 5 рдмрдВрдж
- рд╣реИрдВрдбрд▓рд░ 6 рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╣рдордиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд░реНрд╡рд░
ask_clients
рднреЗрдЬрд╛ рд╣реИ) - рд╣реИрдВрдбрд▓рд░ 6 рдХреЛ
async_receive
рдХрд╣рддрд╛ рд╣реИ, рдЬреЛ рд╣реИрдВрдбрд▓рд░ 7 рдмрдирд╛рддрд╛ рд╣реИ (рд╣рдо рдореМрдЬреВрджрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рд╕реВрдЪреА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ) - рд╣реИрдВрдбрд▓рд░ 6 рдмрдВрдж
- рд╣реИрдВрдбрд▓рд░ 7 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ
- рд╣реИрдВрдбрд▓рд░ 7
on_answer_from_serve
(рдЬрд╣рд╛рдВ рд╣реИрдВрдбрд▓рд░ 8 рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ - рд╣реИрдВрдбрд▓рд░ 7 рдмрдВрдж
- рд╣реИрдВрдбрд▓рд░ 8 рдЦреБрд▓рддрд╛ рд╣реИ, рдФрд░ рдбрдВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ (
on_clients
) рдХреА рдПрдХ рд╕реВрдЪреА рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ
рдЗрд╕рдХреА рдЖрджрдд рдкрдбрд╝рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЖрдк рдЙрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рднрд╛рдЧ рдвреВрдВрдврдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╣реИрдВрдбрд▓рд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдЦрдирд╛
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╣реИрдВрдбрд▓рд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рд╕реНрдЯреНрд░реАрдо (
std::cerr
рдмрд░рд╛рдмрд░) рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддреА рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдХрдВрд╕реЛрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░рдл, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рд░реАрд╕реЗрдЯ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬ (рдЧреИрд░-рдХрдВрд╕реЛрд▓) рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рддреНрд░реБрдЯрд┐ рд╕реНрдЯреНрд░реАрдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЦрд╛рд▓реА рд╣реИред
рдЖрдк рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
some_application 2>err.txt
рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рдЖрд▓рд╕реА рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдПрд╕рдПрд╕рдПрд▓
Boost.Asio рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдПрд╕рдПрд╕рдПрд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдВрджрд░, рд╡рд╣
OpenSSL
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ
рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ,
OpenSSL
рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдПрдХ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЬреИрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдВрдХрд▓рдХ рдирд╣реАрдВ рд╣реИрдВред
рдпрджрд┐ рдЖрдкрдиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ
OpenSSL
рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рддреЛ Boost.Asio рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдРрдб-рдСрди рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ:
ssl::stream
: ip::::socket
рдмрдЬрд╛рдп рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ip::::socket
рдХреНрд▓рд╛рд╕
ssl::context
: рдпрд╣ рд╕рддреНрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ
ssl::rfc2818_verification
: рдпрд╣ рд╡рд░реНрдЧ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХреЛ рд╣реЛрд╕реНрдЯрдирд╛рдо рджреНрд╡рд╛рд░рд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ ssl::rfc2818_verification
рдЕрдиреБрд╕рд╛рд░
рдЕрдЧрд▓реЗ рдХреБрдЫ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдореИрдВ рдХрдИ рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рдкрд╣рд▓реЗ рдЕрдзреНрдпрд╛рдпреЛрдВ (рддреАрди, рд╢рд╛рдпрдж 4) рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рд╕рдиреНрди рдХрд░реЗрдЧрд╛, рдФрд░ рдореИрдВ рдкрд╣рд▓реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред
рдЖрдк рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж, рдЬрд▓реНрдж рд╣реА рдорд┐рд▓рддреЗ рд╣реИрдВ!