📄 server.cpp
字号:
PortableServer::ServantBase_var safe_servant (servant);
PortableServer::ObjectId_var id =
rt_poa->activate_object_with_priority (servant,
::server_priority
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
CORBA::Object_var object =
poa->id_to_reference (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
write_iors_to_file (object.in (),
this->orb_.in (),
test_name
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
void
server::test_bands_server_declared_poa (CORBA::PolicyList &policies,
CORBA::Short server_priority,
CORBA::Short client_priority,
const char *test_name
ACE_ENV_ARG_DECL)
{
this->test_bands_poa (policies,
server_priority,
client_priority,
&server::test_no_bands_server_declared_poa,
test_name
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
void
server::test_default_pool_no_bands_server_declared_poa (ACE_ENV_SINGLE_ARG_DECL)
{
this->test_default_pool_poa (::server_priority,
::client_priority + 1,
&server::test_no_bands_server_declared_poa,
"default_pool_no_bands_server_declared"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
void
server::test_no_lanes_no_bands_server_declared_poa (ACE_ENV_SINGLE_ARG_DECL)
{
this->test_no_lanes_poa (::server_priority,
::client_priority - 1,
&server::test_no_bands_server_declared_poa,
"no_lanes_no_bands_server_declared"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
void
server::test_lanes_no_bands_server_declared_poa (ACE_ENV_SINGLE_ARG_DECL)
{
this->test_lanes_poa (::server_priority,
::client_priority + 1,
&server::test_no_bands_server_declared_poa,
"lanes_no_bands_server_declared"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
void
server::test_default_pool_bands_server_declared_poa (ACE_ENV_SINGLE_ARG_DECL)
{
this->test_default_pool_poa (::server_priority,
::client_priority - 1,
&server::test_bands_server_declared_poa,
"default_pool_bands_server_declared"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
void
server::test_no_lanes_bands_server_declared_poa (ACE_ENV_SINGLE_ARG_DECL)
{
this->test_no_lanes_poa (::server_priority,
::client_priority + 1,
&server::test_bands_server_declared_poa,
"no_lanes_bands_server_declared"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
void
server::test_lanes_bands_server_declared_poa (ACE_ENV_SINGLE_ARG_DECL)
{
this->test_lanes_poa (::server_priority,
::client_priority - 1,
&server::test_bands_server_declared_poa,
"lanes_bands_server_declared"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
class Task : public ACE_Task_Base
{
public:
Task (ACE_Thread_Manager &thread_manager,
CORBA::ORB_ptr orb);
int svc (void);
CORBA::ORB_var orb_;
};
Task::Task (ACE_Thread_Manager &thread_manager,
CORBA::ORB_ptr orb)
: ACE_Task_Base (&thread_manager),
orb_ (CORBA::ORB::_duplicate (orb))
{
}
int
Task::svc (void)
{
ACE_TRY_NEW_ENV
{
CORBA::Object_var object =
this->orb_->resolve_initial_references ("RTORB"
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
RTCORBA::RTORB_var rt_orb =
RTCORBA::RTORB::_narrow (object.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
// The following sets the current thread to the lowest priority
// for this scheduling policy. This will give us the biggest
// range on NT since the default priority is 0 where as the
// lowest priority is -15.
ACE_hthread_t current_thread;
ACE_Thread::self (current_thread);
int sched_policy =
this->orb_->orb_core ()->orb_params ()->ace_sched_policy ();
int minimum_priority =
ACE_Sched_Params::priority_min (sched_policy);
int result =
ACE_Thread::setprio (current_thread,
minimum_priority);
if (result != 0)
return result;
object =
this->orb_->resolve_initial_references ("RTCurrent"
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
RTCORBA::Current_var current =
RTCORBA::Current::_narrow (object.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
default_thread_priority =
current->the_priority (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
client_priority =
default_thread_priority + 2;
server_priority =
default_thread_priority + 5;
object =
this->orb_->resolve_initial_references ("RootPOA"
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
PortableServer::POA_var root_poa =
PortableServer::POA::_narrow (object.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
PortableServer::POAManager_var poa_manager =
root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server server (this->orb_.in (),
rt_orb.in (),
root_poa.in (),
poa_manager.in ());
server.test_root_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_child_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_default_pool_no_bands_client_propagated_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_default_pool_no_bands_server_declared_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_no_lanes_no_bands_client_propagated_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_no_lanes_no_bands_server_declared_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_lanes_no_bands_client_propagated_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_lanes_no_bands_server_declared_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_default_pool_bands_client_propagated_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_default_pool_bands_server_declared_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_no_lanes_bands_client_propagated_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_no_lanes_bands_server_declared_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_lanes_bands_client_propagated_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
server.test_lanes_bands_server_declared_poa (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
this->orb_->run (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
this->orb_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught");
return -1;
}
ACE_ENDTRY;
return 0;
}
int
main (int argc, char **argv)
{
ACE_TRY_NEW_ENV
{
CORBA::ORB_var orb =
CORBA::ORB_init (argc,
argv,
0
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
int result =
parse_args (argc, argv);
if (result != 0)
return result;
// Make sure we can support multiple priorities that are required
// for this test.
check_supported_priorities (orb.in());
// Thread Manager for managing task.
ACE_Thread_Manager thread_manager;
// Create task.
Task task (thread_manager,
orb.in ());
// Task activation flags.
long flags =
THR_NEW_LWP |
THR_JOINABLE |
orb->orb_core ()->orb_params ()->thread_creation_flags ();
// Activate task.
result =
task.activate (flags);
if (result == -1)
{
if (errno == EPERM)
{
ACE_ERROR_RETURN ((LM_ERROR,
"Cannot create thread with scheduling policy %s\n"
"because the user does not have the appropriate privileges, terminating program....\n"
"Check svc.conf options and/or run as root\n",
sched_policy_name (orb->orb_core ()->orb_params ()->ace_sched_policy ())),
2);
}
else
// Unexpected error.
ACE_ASSERT (0);
}
// Wait for task to exit.
result =
thread_manager.wait ();
ACE_ASSERT (result != -1);
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught");
return -1;
}
ACE_ENDTRY;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -