예제 #1
0
		virtual void
		so_define_agent()
			{
				so_subscribe( m_self_mbox )
						.event( []( const msg_convert & msg ) mutable -> std::string
								{
									std::ostringstream s;
									s << msg.m_value;

									return s.str();
								} );

				so_subscribe( m_self_mbox )
						.event( []( const msg_print & msg ) mutable
								{
									std::ostringstream s;
									s << msg.m_value;
								} );

				so_subscribe( m_self_mbox )
						.event< msg_get_status >(
								[]() mutable -> std::string
								{
									return "ready";
								} );
			}
예제 #2
0
void
test_agent_t::so_define_agent()
{
	so_subscribe( m_test_mbox )
		.event( &test_agent_t::evt_test );

	so_subscribe( m_test_mbox )
		.event( &test_agent_t::evt_stop );
}
예제 #3
0
		virtual void
		so_define_agent()
		{
			so_subscribe( m_mbox ).event< msg_parent_started >(
					&a_driver_t::evt_parent_started );

			so_subscribe( m_mbox ).event< msg_shutdown >(
					&a_driver_t::evt_shutdown );
		}
예제 #4
0
		void
		so_define_agent()
		{
			so_subscribe( so_direct_mbox() )
				.event( &a_test_t::evt_one );
			so_subscribe( so_direct_mbox() )
				.event( &a_test_t::evt_three );
			so_subscribe( so_direct_mbox() )
				.event( &a_test_t::evt_four );
		}
예제 #5
0
	virtual void
	so_define_agent() override
	{
		so_set_delivery_filter( m_data_mbox, []( const dummy_msg & msg ) {
				return 0 == msg.m_i;
			} );

		so_subscribe( m_data_mbox ).event< finish >( &a_test_t::evt_finish );
		so_subscribe( m_data_mbox ).event( &a_test_t::evt_dummy_msg );
	}
예제 #6
0
		void
		so_define_agent()
		{
			so_subscribe( m_mbox_1 )
				.event( &a_test_t::evt_msg_1 );

			so_subscribe( m_mbox_2 )
				.event( &a_test_t::evt_msg_2 );

			so_subscribe( m_mbox_2 )
				.event( &a_test_t::evt_stop );
		}
예제 #7
0
		virtual void
		so_define_agent()
			{
				so_subscribe( m_self_mbox ).event(
						&a_client_t::evt_next_normal_convert );

				so_subscribe( m_self_mbox ).in( st_deadlocks )
						.event( &a_client_t::evt_next_back_call_convert );

				so_subscribe( m_self_mbox ).in( st_deadlocks )
						.event( &a_client_t::svc_back_call );
			}
예제 #8
0
		void
		so_define_agent()
		{
			so_subscribe( m_mbox )
				.event( &a_test_t::evt_delayed_message );

			so_subscribe( m_mbox )
				.event( &a_test_t::evt_do_resend );

			so_subscribe( m_mbox )
				.event( &a_test_t::evt_stop );
		}
예제 #9
0
		void
		so_define_agent()
		{
			so_subscribe( m_mbox )
				.event( &a_test_t::evt_one );
			so_subscribe( m_mbox )
				.event( &a_test_t::evt_two );
			so_subscribe( m_mbox )
				.event( &a_test_t::evt_three );
			so_subscribe( m_mbox )
				.event( &a_test_t::evt_four );
		}
예제 #10
0
		virtual void
		so_define_agent()
			{
				so_subscribe( m_self_mbox )
						.event( &a_convert_service_t::svc_default );

				so_subscribe( m_self_mbox )
						.event( &a_convert_service_t::svc_back_call_default );

				so_subscribe( m_self_mbox )
						.event( &a_convert_service_t::svc_convert );

				so_subscribe( m_self_mbox )
						.event( &a_convert_service_t::svc_back_call_convert );
			}
예제 #11
0
		void
		so_define_agent()
		{
			so_subscribe( m_mbox )
				.event( &a_test_t::evt_msg_1 );

			so_subscribe( m_mbox ).in( st_stored )
				.event( &a_test_t::evt_do_resend );

			so_subscribe( m_mbox ).in( st_stored )
				.event( &a_test_t::evt_msg_2 );

			so_subscribe( m_mbox ).in( st_stored )
				.event( &a_test_t::evt_stop );
		}
예제 #12
0
		virtual void
		so_define_agent()
			{
				so_subscribe( m_self_mbox )
						.event< msg_shutdown >(
								[this]() { so_environment().stop(); } );
			}
예제 #13
0
		virtual void
		so_define_agent()
		{
			so_subscribe( m_mbox ).event< msg_check_signal >(
					&a_child_t::evt_check_signal );

			try
			{
				m_parent_mbox->run_one()
						.wait_for( std::chrono::milliseconds( 100 ) )
						.sync_get< msg_initiate_dereg >();

				throw std::runtime_error( "timeout expected" );
			}
			catch( const so_5::exception_t & x )
			{
				if( so_5::rc_svc_result_not_received_yet != x.error_code() )
				{
					std::cerr << "timeout expiration expected, but "
							"the actual error_code: "
							<< x.error_code() << std::endl;
					std::abort();
				}
			}

			m_mbox->deliver_signal< msg_check_signal >();
		}
예제 #14
0
		void
		so_define_agent()
		{
			so_subscribe( m_self_mbox ).event< msg_test_signal >( [] {
					throw std::runtime_error( "Exception from a_test_t!" );
				} );
		}
예제 #15
0
		virtual void
		so_define_agent()
		{
			so_subscribe( so_direct_mbox() )
				.in( so_default_state() )
					.event( &a_ordinary_t::some_handler );

			so_direct_mbox()->deliver_signal< some_message >();
		}
예제 #16
0
		void
		evt_three( const so_5::event_data_t< msg_three > & )
		{
			m_sequence += "e3:";

			so_drop_subscription( so_direct_mbox(), &a_test_t::evt_one );

			so_subscribe( so_direct_mbox() ).event( &a_test_t::evt_two );
		}
예제 #17
0
	virtual void
	so_define_agent() override
	{
		so_set_delivery_filter( m_svc_mbox, []( const data & msg ) {
				return 1 == std::get<0>( msg );
			} );

		so_subscribe( m_svc_mbox ).event( []( const data & msg ) {
				return 1 + std::get<0>( msg );
			} );
	}
예제 #18
0
	shutdowner( context_t ctx, unsigned int producers_count )
		:	so_5::agent_t{ ctx }
		,	m_producers_left{ producers_count }
	{
		so_subscribe( so_environment().create_mbox( "shutdowner" ) )
			.event< another_producer_finished >( [this] {
					--m_producers_left;
					if( !m_producers_left )
						so_environment().stop();
				} );
	}
예제 #19
0
		virtual void
		so_define_agent()
		{
			so_5::mbox_t mbox = so_environment()
				.create_mbox( g_test_mbox_name );

			so_subscribe( mbox )
				.in( so_default_state() )
					.event( &a_ordinary_t::some_handler );

			// Give time to test message sender.
			std::this_thread::sleep_for( std::chrono::milliseconds( 10 ) );
		}
예제 #20
0
		void
		evt_one( const so_5::event_data_t< msg_one > & )
		{
			for( size_t i = 0; i != 10000u; ++i )
			{
				so_drop_subscription( m_mbox, &a_test_t::evt_two );

				so_subscribe( m_mbox ).event( &a_test_t::evt_two );

				m_mbox->deliver_signal< msg_two >();
			}

			so_drop_subscription( m_mbox, &a_test_t::evt_two );
		}
예제 #21
0
		virtual void
		so_evt_start()
		{
			so_5::mbox_t mbox = so_environment()
				.create_mbox( so_coop_name() + "_mbox" );

			so_subscribe( mbox )
				.in( so_default_state() )
					.event( &a_master_t::evt_slave_finished );

			so_environment().register_agent_as_coop(
					so_coop_name() + "_slave",
					new a_slave_t( so_environment(),  mbox ) );
		}
예제 #22
0
		a_shutdowner_t(
			so_5::rt::environment_t & env,
			const so_5::rt::mbox_t & mbox,
			unsigned int sender_count )
			:	so_5::rt::agent_t( env )
			,	m_sender_count( sender_count )
			{
				so_subscribe( mbox ).event< msg_complete >(
					[=] {
						m_sender_count -= 1;
						if( !m_sender_count )
							so_environment().stop();
					} );
			}
예제 #23
0
		void
		so_define_agent()
		{
			so_subscribe( m_mbox )
				.event( &a_test_t::evt_default_one )
				.event( &a_test_t::evt_default_two )
				.event( &a_test_t::evt_default_three )
				.event( &a_test_t::evt_default_four )
				.event< msg_five >( &a_test_t::evt_five );

			so_subscribe( m_mbox ).in( st_1 )
				.event( &a_test_t::evt_st_1_one )
				.event( &a_test_t::evt_st_1_two )
				.event( &a_test_t::evt_st_1_three )
				.event( &a_test_t::evt_default_four )
				.event< msg_five >( &a_test_t::evt_five );

			so_subscribe( m_mbox ).in( st_2 )
				.event( &a_test_t::evt_st_2_one )
				.event( &a_test_t::evt_st_2_two )
				.event( &a_test_t::evt_st_2_three )
				.event< msg_five >( &a_test_t::evt_five );
		}
예제 #24
0
	virtual void
	so_define_agent() override
	{
		so_set_delivery_filter( m_data_mbox, []( const data & msg ) {
				return 1 == std::get<0>( msg );
			} );

		so_subscribe( m_data_mbox ).event( [this]( const data & msg ) {
				const auto value = std::get<0>( msg );
				if( 1 == value )
					so_deregister_agent_coop_normally();
				else
					throw std::runtime_error( "unexpected value: " +
							std::to_string( value ) );
			} );
	}
예제 #25
0
		virtual void
		so_define_agent()
			{
				so_subscribe( m_self_mbox ).in( st_dummy )
						.event( &a_convert_service_t::svc_convert );
			}
예제 #26
0
		void
		so_define_agent()
		{
			so_subscribe( m_mbox ).event( &a_test_t::evt_child_deregistered );
		}
예제 #27
0
		void
		so_define_agent()
		{
			so_subscribe( m_self_mbox )
				.event( &a_test_t::evt_child_started );
		}
예제 #28
0
		virtual void
		so_define_agent()
		{
			so_subscribe( m_mbox ).event< msg_initiate_dereg >(
					&a_parent_t::evt_initiate_dereg );
		}