void
		so_evt_start()
			{
				ensure_counter_value( m_message_counter, 0 );

				m_id1 = so_environment().schedule_timer(
						make_message_object(),
						so_direct_mbox(),
						6000,
						0 );
				m_id2 = so_environment().schedule_timer(
						make_message_object(),
						so_direct_mbox(),
						6000,
						1000 );
				m_id3 = so_environment().schedule_timer(
						make_message_object(),
						so_direct_mbox(),
						6000,
						0 );
				m_id4 = so_environment().schedule_timer(
						make_message_object(),
						so_direct_mbox(),
						6000,
						1000 );

				m_id1.release();
				m_id2.release();

				ensure_counter_value( m_message_counter, 2 );

				so_deregister_agent_coop_normally();
			}
Example #2
0
	virtual void
	so_define_agent() override
	{
		so_set_delivery_filter( m_data_mbox,
			[]( const data & msg ) {
				return 1 == std::get<0>( msg );
			} );

		so_default_state()
			.event( m_data_mbox, [this]( const data & msg ) {
				const auto value = std::get<0>( msg );
				if( 1 != value )
					throw std::runtime_error( "unexpected data value: " +
							std::to_string( value ) );
				++m_values_accepted;
			} )
			.event< finish >( [this] {
				if( 2 != m_values_accepted )
					throw std::runtime_error( "unexpected count of "
							"accepted data instances: " +
							std::to_string( m_values_accepted ) );

				so_deregister_agent_coop_normally();
			} );
	}
Example #3
0
	virtual void
	so_evt_start() override
	{
		expect_current_state( C );

		this >>= D; // The current state is "A.B.D".
		expect_current_state( D );

		this >>= E; // The current state is "E".
		expect_current_state( E );

		this >>= A; // The current state is "A.B.D" because deep history of A.
		expect_current_state( D );

		this >>= E;
		expect_current_state( E );

		A.clear_history();
		this >>= A; // The current state is "A.B.D" because:
						// B is the initial substate of A and B has shallow history;
						// D is the last active substate of B.
		expect_current_state( D );

		this >>= E;
		expect_current_state( E );

		A.clear_history();
		B.clear_history();
		this >>= A; // The current state is "A.B.C" because:
		            // B is initial substate of A and
						// C is initial substate of B.
		expect_current_state( C );

		so_deregister_agent_coop_normally();
	}
Example #4
0
	void
	evt_child_created(
		const so_5::rt::msg_coop_registered & evt )
	{
		std::cout << "registration passed: " << evt.m_coop_name << std::endl;

		so_deregister_agent_coop_normally();
	}
	virtual void so_define_agent() override
	{
		so_default_state().event< msg_your_turn >( [this] {
				if( m_next )
					so_5::send< msg_your_turn >( m_next );
				else
					so_deregister_agent_coop_normally();
			} );
	}
Example #6
0
		virtual void
		so_define_agent()
		{
			so_subscribe_self().event< msg_tick >( [=] {
					m_ticks += 1;
					if( m_ticks < 15 )
						so_direct_mbox()->deliver_signal< msg_tick >();
					else
						so_deregister_agent_coop_normally();
				} );
		}
Example #7
0
	virtual void
	so_define_agent() override
	{
		so_default_state()
			.event< msg_one >( [&]{ ++m_received; } )
			.event< msg_two >( [&]{
				if( 2 != m_received )
					throw std::runtime_error( "unexpected count of "
							"received msg_one instances: " +
							std::to_string( m_received ) );

				so_deregister_agent_coop_normally();
			} );
	}
Example #8
0
	virtual void
	so_define_agent() override
	{
		so_default_state()
			.event( [this]( const so_5::msg_coop_deregistered & ) {
				so_5::send< data >( m_data_mbox, 0 );
				so_5::send< data >( m_data_mbox, 1 );
				so_5::send< data >( m_data_mbox, 2 );

				so_5::send_to_agent< finish >( *this );
			} )
			.event< finish >( [this] {
				so_deregister_agent_coop_normally();
			} );
	}
Example #9
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 ) );
			} );
	}
	virtual void so_define_agent() override
	{
		// A notification on complete children cooperation deregistration
		// must be received and handled.
		so_default_state().event(
			[this]( const so_5::msg_coop_deregistered & ) {
				--m_remaining_iterations;
				show_remaining_iterations();

				if( m_remaining_iterations )
					// There are some iterations left.
					// New child cooperation must be created and started.
					create_new_child_coop();
				else
				{
					// Example must be finished.
					std::cout << "no more iterations left, finishing..." << std::endl;
					so_deregister_agent_coop_normally();
				}
			} );
	}
	virtual void
	so_evt_start() override
	{
		auto proxy = m_svc_mbox->get_one< int >().wait_forever();
		try {
			proxy.make_sync_get< data >( 0 );
			throw std::runtime_error( "unexpected result for value 0" );
		}
		catch( const so_5::exception_t & x )
		{
			if( so_5::rc_no_svc_handlers != x.error_code() )
				throw std::runtime_error( "unexpected error_code: " +
						std::to_string( x.error_code() ) );
		}

		auto r = proxy.make_sync_get< data >( 1 );
		if( 2 != r )
			throw std::runtime_error( "unexpected result for value 1: " +
					std::to_string( r ) );

		so_deregister_agent_coop_normally();
	}
	void
	evt_finish()
	{
		so_deregister_agent_coop_normally();
	}