コード例 #1
0
		virtual void
		so_evt_start()
		{
			auto child = so_environment().create_coop(
					so_coop_name() + "::child" );
			child->set_parent_coop_name( so_coop_name() );

			auto mbox = so_environment().create_mbox();
			child->add_agent( new a_test_t( so_environment(), mbox ) );

			so_environment().register_coop( std::move(child) );

			mbox->deliver_signal< msg_test_signal >();
		}
コード例 #2
0
		void
		evt_parent_started()
		{
			auto coop = so_environment().create_coop( "child",
					so_5::disp::active_obj::create_disp_binder( "active_obj" ) );
			coop->set_parent_coop_name( "parent" );

			coop->add_agent(
				new a_child_t(
					so_environment(),
					so_environment().create_mbox(),
					m_mbox ) );

			so_environment().register_coop( std::move( coop ) );

			so_environment().single_timer< msg_shutdown >( m_mbox, 500 );
		}
コード例 #3
0
		void
		so_evt_start()
		{
			auto child_coop = so_environment().create_coop( "child" );
			child_coop->set_parent_coop_name( so_coop_name() );
			child_coop->add_reg_notificator( m_reg_notificator );
			child_coop->add_dereg_notificator( m_dereg_notificator );
			child_coop->add_dereg_notificator(
					[this]( so_5::environment_t &,
						const std::string &,
						const so_5::coop_dereg_reason_t &)
					{
						m_mbox->deliver_signal< msg_child_deregistered >();
					} );

			child_coop->add_agent( new a_child_t( so_environment() ) );

			so_environment().register_coop( std::move( child_coop ) );
		}
コード例 #4
0
ファイル: main.cpp プロジェクト: DronMDF/SObjectizer
		void
		try_start_new_iteration()
		{
			if( m_iterations_left <= 0 )
			{
				std::cout << "COMPLETED!" << std::endl;

				so_environment().stop();
				return;
			}

			std::cout << m_iterations_left << " iterations left...\r"
				<< std::flush;

			m_state = state_t::awaiting_creation;
			m_acks_received = 0;
			m_destroy_received = 0;

			m_child_mboxes = std::vector< so_5::rt::mbox_t >();
			m_child_mboxes.reserve( m_max_agents );

			auto coop = so_environment().create_coop( "child" );
			coop->set_parent_coop_name( so_coop_name() );
			coop->add_reg_notificator(
					so_5::rt::make_coop_reg_notificator( so_direct_mbox() ) );
			coop->add_dereg_notificator(
					so_5::rt::make_coop_dereg_notificator( so_direct_mbox() ) );

			for( std::size_t i = 0; i != m_max_agents; ++i )
			{
				std::unique_ptr< so_5::rt::agent_t > agent(
						new a_child_t(
								so_environment(),
								so_direct_mbox() ) );
				m_child_mboxes.push_back( agent->so_direct_mbox() );

				coop->add_agent( std::move( agent ) );
			}

			so_environment().register_coop( std::move( coop ) );
		}