📄 cec_typedeventchannel.cpp
字号:
}
// Obtain the operations
for (CORBA::ULong oper=0; oper<fid->operations.length(); oper++)
{
if (TAO_debug_level >= 10)
{
ACE_DEBUG ((LM_DEBUG, "***** Operation %s found on interface %s, num params %d *****\n",
fid->operations[oper].name.in(),
interface_,
fid->operations[oper].parameters.length() ));
}
// Obtain the parameters
CORBA::ULong num_params = fid->operations[oper].parameters.length();
TAO_CEC_Operation_Params *oper_params = new TAO_CEC_Operation_Params (num_params);
for (CORBA::ULong param=0; param<num_params; param++)
{
oper_params->parameters_[param].name_ = fid->operations[oper].parameters[param].name.in();
oper_params->parameters_[param].type_ = fid->operations[oper].parameters[param].type;
switch (fid->operations[oper].parameters[param].mode)
{
case CORBA::PARAM_IN:
oper_params->parameters_[param].direction_ = CORBA::ARG_IN;
break;
case CORBA::PARAM_OUT:
oper_params->parameters_[param].direction_ = CORBA::ARG_OUT;
break;
case CORBA::PARAM_INOUT:
oper_params->parameters_[param].direction_ = CORBA::ARG_INOUT;
break;
}
if (TAO_debug_level >= 10)
{
ACE_DEBUG ((LM_DEBUG, "***** Parameter %s found on operation %s *****\n",
oper_params->parameters_[param].name_.in(),
fid->operations[oper].name.in() ));
}
}
if (TAO_debug_level >= 10)
{
ACE_DEBUG ((LM_DEBUG, "***** Adding operation %s with %d parameters to the IFR cache *****\n",
fid->operations[oper].name.in(),
oper_params->num_params_ ));
}
int result = insert_into_ifr_cache (fid->operations[oper].name.in(), oper_params);
if (result != 0)
{
if (TAO_debug_level >= 10)
{
ACE_DEBUG ((LM_DEBUG, "***** Adding operation to IFR cache failed *****\n"));
}
}
}
}
}
ACE_CATCH (CORBA::SystemException, sysex)
{
if (TAO_debug_level >= 4)
{
ACE_PRINT_EXCEPTION (sysex, "during TAO_CEC_TypedEventChannel::cache_interface_description");
}
return -1;
}
ACE_CATCHANY
{
if (TAO_debug_level >= 4)
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
"ACE_ANY_EXCEPTION raised during TAO_CEC_TypedEventChannel::cache_interface_description");
}
return -1;
}
ACE_ENDTRY;
return 0;
}
// A consumer is attempting to register its uses_interface.
// Note only a single interface can be registered with this version of the EC.
// For users that require more than one interface, start another EC.
// If the passed uses_interface is the same as a registered interface the function returns 0.
// If an attempt is made to register a second interface, this function will return -1
// and the TypedConsumerAdmin will throw CosTypedEventChannelAdmin::NoSuchImplementation.
// If neither a consumer nor a supplier has registered an interface,
// the function calls cache_interface_description and returns 0 if successful.
int
TAO_CEC_TypedEventChannel::consumer_register_uses_interace (const char *uses_interface
ACE_ENV_ARG_DECL)
{
// Check if a consumer has already registered an interface with the typed EC
if (this->uses_interface_.length() > 0)
{
// Check if the registered uses_interface_ == the new uses_interface
if (this->uses_interface_ == ACE_CString (uses_interface))
{
return 0;
}
else
{
if (TAO_debug_level >= 10)
{
ACE_DEBUG ((LM_DEBUG, "***** different uses_interface_ already registered *****\n"));
}
return -1;
}
}
// Check if a supplier has already registered an inerface with the typed EC
if (this->supported_interface_.length() > 0)
{
// Check if the registered supported_interface_ == the new uses_interface
if (this->supported_interface_ == ACE_CString (uses_interface))
{
this->uses_interface_ = uses_interface;
return 0;
}
else
{
if (TAO_debug_level >= 10)
{
ACE_DEBUG ((LM_DEBUG, "***** different supported_interface_ already registered *****\n"));
}
return -1;
}
}
else
{
// Neither a consumer nor a supplier has connected yet
int result = cache_interface_description (uses_interface ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (-1);
if (result == 0)
{
this->uses_interface_ = uses_interface;
}
return result;
}
// Should not get here!
return -1;
}
// A supplier is attempting to register its supported_interface.
// Note only a single interface can be registered with this version of the EC.
// For users that require more than one interface, start another EC.
// If the passed supported_interface is the same as a registered interface the function returns 0.
// If an attempt is made to register a second interface, this function will return -1
// and the TypedSupplierAdmin will throw CosTypedEventChannelAdmin::InterfaceNotSupported.
// If neither a consumer nor a supplier has registered an interface,
// the function calls cache_interface_description and returns 0 if successful.
int
TAO_CEC_TypedEventChannel::supplier_register_supported_interface (const char *supported_interface
ACE_ENV_ARG_DECL)
{
// Check if a supplier has already registered an interface with the typed EC
if (this->supported_interface_.length() > 0)
{
// Check if the registered interface == the new supported_interface
if (this->supported_interface_ == ACE_CString (supported_interface))
{
return 0;
}
else
{
if (TAO_debug_level >= 10)
{
ACE_DEBUG ((LM_DEBUG, "***** different supported_interface_ already registered *****\n"));
}
return -1;
}
}
// Check if a consumer has already registered an inerface with the typed EC
if (this->uses_interface_.length() > 0)
{
// Check if the registered uses_interface_ == the new supported_interface
if (this->uses_interface_ == ACE_CString (supported_interface))
{
this->supported_interface_ = supported_interface;
return 0;
}
else
{
if (TAO_debug_level >= 10)
{
ACE_DEBUG ((LM_DEBUG, "***** different uses_interface_ already registered *****\n"));
}
return -1;
}
}
else
{
// Neither a consumer nor a supplier has connected yet
int result = cache_interface_description (supported_interface ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (-1);
if (result == 0)
{
this->supported_interface_ = supported_interface;
}
return result;
}
// Should not get here!
return -1;
}
// Function creates a NVList and populates it from the parameter information.
void
TAO_CEC_TypedEventChannel::create_operation_list (TAO_CEC_Operation_Params *oper_params,
CORBA::NVList_out new_list
ACE_ENV_ARG_DECL)
{
this->orb_->create_list (0, new_list ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
for (CORBA::ULong param=0; param<oper_params->num_params_; param++)
{
CORBA::Any any_1;
any_1._tao_set_typecode(oper_params->parameters_[param].type_.in());
new_list->add_value (oper_params->parameters_[param].name_,
any_1,
oper_params->parameters_[param].direction_
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
// Function creates an empty NVList.
void
TAO_CEC_TypedEventChannel::create_list (CORBA::Long count,
CORBA::NVList_out new_list
ACE_ENV_ARG_DECL)
{
this->orb_->create_list (count, new_list ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
// The CosTypedEventChannelAdmin::TypedEventChannel methods...
CosTypedEventChannelAdmin::TypedConsumerAdmin_ptr
TAO_CEC_TypedEventChannel::for_consumers (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return this->typed_consumer_admin_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
}
CosTypedEventChannelAdmin::TypedSupplierAdmin_ptr
TAO_CEC_TypedEventChannel::for_suppliers (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return this->typed_supplier_admin_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
}
void
TAO_CEC_TypedEventChannel::destroy (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
if (!destroyed_)
{
destroyed_ = 1;
this->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
}
}
#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
template class ACE_Hash_Map_Entry<const char *, TAO_CEC_Operation_Params *>;
template class ACE_Hash_Map_Manager_Ex<const char *, TAO_CEC_Operation_Params *, ACE_Hash<const char *>, ACE_Equal_To<const char *>, ACE_Null_Mutex>;
template class ACE_Hash_Map_Iterator_Base_Ex<const char *, TAO_CEC_Operation_Params *, ACE_Hash<const char *>, ACE_Equal_To<const char *>, ACE_Null_Mutex>;
template class ACE_Hash_Map_Iterator_Ex<const char *, TAO_CEC_Operation_Params *, ACE_Hash<const char *>, ACE_Equal_To<const char *>, ACE_Null_Mutex>;
template class ACE_Hash_Map_Reverse_Iterator_Ex<const char *, TAO_CEC_Operation_Params *, ACE_Hash<const char *>, ACE_Equal_To<const char *>, ACE_Null_Mutex>;
#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
#pragma instantiate ACE_Hash_Map_Entry<const char *, TAO_CEC_Operation_Params *>
#pragma instantiate ACE_Hash_Map_Manager_Ex<const char *, TAO_CEC_Operation_Params *, ACE_Hash<const char *>, ACE_Equal_To<const char *>, ACE_Null_Mutex>
#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<const char *, TAO_CEC_Operation_Params *, ACE_Hash<const char *>, ACE_Equal_To<const char *>, ACE_Null_Mutex>
#pragma instantiate ACE_Hash_Map_Iterator_Ex<const char *, TAO_CEC_Operation_Params *, ACE_Hash<const char *>, ACE_Equal_To<const char *>, ACE_Null_Mutex>
#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<const char *, TAO_CEC_Operation_Params *, ACE_Hash<const char *>, ACE_Equal_To<const char *>, ACE_Null_Mutex>
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -