📄 cec_event_loader.cpp
字号:
this->naming_context_->rebind (this->channel_name_,
event_channel.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
else
{
this->naming_context_->bind (this->channel_name_,
event_channel.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
}
return CosEventChannelAdmin::EventChannel::_duplicate (event_channel.in () );
#if defined (TAO_HAS_TYPED_EVENT_CHANNEL)
}
else
{
// If Typed EC, initialize the IFR, then create and activate the typed event service
// ****************************************************************
// IFR initialization
if (TAO_debug_level >= 10)
{
ACE_DEBUG ((LM_DEBUG, "***** Initializing the IFR connection... *****\n"));
}
CORBA::Repository_var interface_repository;
CORBA::Object_var ifr_obj_var =
orb->resolve_initial_references ("InterfaceRepository" ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
if (CORBA::is_nil(ifr_obj_var.in () ))
{
if (TAO_debug_level >= 10)
{
ACE_DEBUG ((LM_DEBUG, "***** resolve_initial_references for IFR failed\n *****"));
}
return CORBA::Object::_nil ();
}
else
{
interface_repository = CORBA::Repository::_narrow(ifr_obj_var.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
if (TAO_debug_level >= 10)
{
if (CORBA::is_nil(interface_repository.in () ))
{
ACE_DEBUG ((LM_DEBUG, "***** CORBA::Repository::_narrow failed *****\n"));
return CORBA::Object::_nil ();
}
else
{
ACE_DEBUG ((LM_DEBUG, "***** ...IFR connection completed *****\n"));
}
}
}
// Create and activate the typed event service
this->typed_attributes_ = new TAO_CEC_TypedEventChannel_Attributes(poa.in (),
poa.in (),
orb,
interface_repository.in ());
if (destroy == 1)
{
this->typed_attributes_->destroy_on_shutdown = 1;
}
this->factory_ = 0;
this->typed_ec_impl_ = new TAO_CEC_TypedEventChannel (*this->typed_attributes_,
this->factory_,
this->terminate_flag_);
this->typed_ec_impl_->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
CosTypedEventChannelAdmin::TypedEventChannel_var event_channel =
this->typed_ec_impl_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
if (ior_file != 0)
{
CORBA::String_var ior =
orb->object_to_string (event_channel.in () ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
FILE *file = ACE_OS::fopen (ior_file, "w");
ACE_OS::fprintf (file, "%s\n", ior.in ());
ACE_OS::fclose (file);
}
// ****************************************************************
this->channel_name_.length (1);
if (this->bind_to_naming_service_)
{
CORBA::Object_var obj =
orb->resolve_initial_references ("NameService"
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
this->naming_context_ =
CosNaming::NamingContext::_narrow (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
this->channel_name_.length (1);
this->channel_name_[0].id = CORBA::string_dup (service_name);
if (use_rebind)
{
this->naming_context_->rebind (this->channel_name_,
event_channel.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
else
{
this->naming_context_->bind (this->channel_name_,
event_channel.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
}
return CosTypedEventChannelAdmin::TypedEventChannel::_duplicate (event_channel.in () );
}
#endif /* TAO_HAS_TYPED_EVENT_CHANNEL */
// ****************************************************************
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, argv[0]);
return CORBA::Object::_nil ();
}
ACE_ENDTRY;
return 0;
}
int
TAO_CEC_Event_Loader::fini (void)
{
// + Since it was activated with _this() you have to do the
// canonical:
// get_object_id
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
#if defined (TAO_HAS_TYPED_EVENT_CHANNEL)
// Release the resources of the Typed Event Channel
this->typed_ec_impl_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
// Deactivate the Typed EC
// This will raise an exception if destroy == 1
PortableServer::POA_var t_poa =
this->typed_ec_impl_->_default_POA (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
PortableServer::ObjectId_var t_id =
t_poa->servant_to_id (this->typed_ec_impl_ ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
t_poa->deactivate_object (t_id.in () ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
#else
// Release the resources of the Event Channel
this->ec_impl_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
// Deactivate the EC
PortableServer::POA_var poa =
this->ec_impl_->_default_POA (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
PortableServer::ObjectId_var id =
poa->servant_to_id (this->ec_impl_ ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
poa->deactivate_object (id.in () ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
#endif /* TAO_HAS_TYPED_EVENT_CHANNEL */
}
ACE_CATCHANY
{
// Do Nothing
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
ACE_TRY_EX (foo)
{
// Unbind the Naming Service
if (this->bind_to_naming_service_)
{
this->naming_context_->unbind (this->channel_name_
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK_EX (foo);
}
// Since we created them, we also have to delete them.
#if defined (TAO_HAS_TYPED_EVENT_CHANNEL)
delete this->typed_attributes_;
delete this->typed_ec_impl_;
#else
delete this->attributes_;
delete this->ec_impl_;
#endif /* TAO_HAS_TYPED_EVENT_CHANNEL */
}
ACE_CATCHANY
{
// Do Nothing
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
ACE_FACTORY_DEFINE (TAO_Event, TAO_CEC_Event_Loader)
#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
template class ACE_Dynamic_Service<TAO_CEC_Event_Loader>;
#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
#pragma instantiate ACE_Dynamic_Service<TAO_CEC_Event_Loader>
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -