11 #include <so_5_extra/async_op/details.hpp> 12 #include <so_5_extra/async_op/errors.hpp> 14 #include <so_5/details/invoke_noexcept_code.hpp> 16 #include <so_5/impl/internal_env_iface.hpp> 18 #include <so_5/agent.hpp> 19 #include <so_5/send_functions.hpp> 21 #include <so_5/timers.hpp> 23 #include <so_5/outliving.hpp> 99 const so_5::state_t & state,
100 std::type_index subscription_type,
101 so_5::event_handler_method_t handler )
120 const so_5::state_t & state,
121 so_5::event_handler_method_t handler )
177 ::so_5::details::do_with_rollback_on_exception( [&] {
178 for(; i != m_completion_handlers.size(); ++i )
180 auto & ch = m_completion_handlers[ i ];
181 m_owner.get().so_create_event_subscription(
183 ch.m_subscription_type,
186 ::so_5::thread_safety_t::unsafe );
190 drop_completion_handlers_subscriptions_up_to( i );
198 std::size_t upper_border )
noexcept 200 for( std::size_t i = 0; i != upper_border; ++i )
202 const auto & ch = m_completion_handlers[ i ];
203 m_owner.get().so_destroy_event_subscription(
205 ch.m_subscription_type,
222 ::so_5::details::do_with_rollback_on_exception( [&] {
223 do_subscribe_default_timeout_handler();
226 do_unsubscribe_default_timeout_handler();
238 ::so_5::details::do_with_rollback_on_exception( [&] {
239 for(; i != m_timeout_handlers.size(); ++i )
241 auto & th = m_timeout_handlers[ i ];
242 m_owner.get().so_create_event_subscription(
247 ::so_5::thread_safety_t::unsafe );
251 drop_timeout_handlers_subscriptions_up_to( i );
259 m_owner.get().so_create_deadletter_subscription(
262 m_default_timeout_handler,
263 ::so_5::thread_safety_t::unsafe );
273 std::size_t upper_border )
noexcept 275 for( std::size_t i = 0; i != upper_border; ++i )
277 const auto & th = m_timeout_handlers[ i ];
278 m_owner.get().so_destroy_event_subscription(
289 drop_completion_handlers_subscriptions_up_to(
290 m_completion_handlers.size() );
306 m_owner.get().so_destroy_deadletter_subscription(
308 m_timeout_msg_type );
318 drop_timeout_handlers_subscriptions_up_to(
319 m_timeout_handlers.size() );
338 m_timeout_timer_id.release();
342 m_completion_handlers.clear();
343 m_timeout_handlers.clear();
344 m_default_timeout_handler = ::so_5::event_handler_method_t{};
352 if( !m_default_timeout_handler )
354 m_default_timeout_handler =
355 [op = ::so_5::intrusive_ptr_t<op_data_t>(
this)](
356 ::so_5::message_ref_t & )
377 ::so_5::outliving_reference_t< ::so_5::agent_t > owner,
379 const std::type_index & timeout_msg_type )
623 details::op_shptr_t< Operation_Data > op )
647 SO_5_NODISCARD status_t
749 template<
typename Operation_Data >
764 details::op_shptr_t< Operation_Data > op )
797 "An attempt to do something on non-activable async_op" );
931 "An attempt to register timeout handler for " 932 "different message type. Expected type: " )
1063 ::so_5::outliving_reference_t< ::so_5::agent_t > owner )
1087 using base_type_t::is_activable;
1108 std::size_t capacity ) &
1115 template<
typename... Args >
1119 return std::move(
this->reserve_completion_handlers_capacity(
1120 std::forward<Args>(args)... ));
1141 std::size_t capacity ) &
1148 template<
typename... Args >
1152 return std::move(
this->reserve_timeout_handlers_capacity(
1153 std::forward<Args>(args)... ));
1194 typename Msg_Target,
1195 typename Event_Handler >
1201 Msg_Target && msg_target,
1203 const ::so_5::state_t & state,
1205 Event_Handler && evt_handler ) &
1216 template<
typename... Args >
1262 template<
typename Event_Handler >
1265 const ::so_5::state_t & state,
1266 Event_Handler && evt_handler ) &
1276 template<
typename... Args >
1330 template<
typename Event_Handler >
1334 Event_Handler && evt_handler ) &
1343 template<
typename... Args >
1425 template<
typename... Args >
1430 std::chrono::steady_clock::duration timeout,
1462 template<
typename... Args >
1466 return this->activate( std::forward<Args>(args)... );
1520 return definition_point_t<Message>( ::so_5::outliving_mutable(owner) );
Description of one completion handler subscription.
completion_handler_subscription_t(so_5::mbox_t mbox, const so_5::state_t &state, std::type_index subscription_type, so_5::event_handler_method_t handler)
Initializing constructor.
timeout_handler_subscription_t(const so_5::state_t &state, so_5::event_handler_method_t handler)
Initializing constructor.
Description of one timeout handler subscription.
::so_5::outliving_reference_t< const ::so_5::state_t > m_state
State for that a subscription should be created.
Ranges for error codes of each submodules.
::so_5::event_handler_method_t m_handler
Event handler.
::so_5::mbox_t m_mbox
Mbox from that a message is expected.
::so_5::outliving_reference_t< const ::so_5::state_t > m_state
State for that a subscription should be created.
::so_5::event_handler_method_t m_handler
Event handler.
std::type_index m_subscription_type
Subscription type.