📄 ftec_event_channel_impl.cpp
字号:
TAO_FTEC_Event_Channel_Impl::for_suppliers (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
CORBA::Object_var obj = supplier_admin()->reference(ACE_ENV_SINGLE_ARG_PARAMETER);
obj = IOGR_Maker::instance()->forge_iogr(obj.in()
ACE_ENV_ARG_PARAMETER);
return RtecEventChannelAdmin::SupplierAdmin::_narrow(obj.in() ACE_ENV_ARG_PARAMETER);
}
::FtRtecEventChannelAdmin::ObjectId *
TAO_FTEC_Event_Channel_Impl::connect_push_consumer (
RtecEventComm::PushConsumer_ptr push_consumer,
const RtecEventChannelAdmin::ConsumerQOS & qos
ACE_ENV_ARG_DECL
)
{
CORBA::Any_var any
= Request_Context_Repository().get_cached_result(ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN(0);
FtRtecEventChannelAdmin::ObjectId *oid;
if (any.in() >>= oid) {
FtRtecEventChannelAdmin::ObjectId* result;
ACE_NEW_THROW_EX(result,
FtRtecEventChannelAdmin::ObjectId(*oid),
CORBA::NO_MEMORY());
return result;
}
ACE_NEW_THROW_EX(oid, FtRtecEventChannelAdmin::ObjectId, CORBA::NO_MEMORY());
FtRtecEventChannelAdmin::ObjectId_var object_id = oid;
Request_Context_Repository().generate_object_id(*oid ACE_ENV_ARG_PARAMETER);
obtain_push_supplier_and_connect(this,
object_id.in(),
push_consumer,
qos
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN(0);
return object_id._retn();
}
::FtRtecEventChannelAdmin::ObjectId *
TAO_FTEC_Event_Channel_Impl::connect_push_supplier (
RtecEventComm::PushSupplier_ptr push_supplier,
const RtecEventChannelAdmin::SupplierQOS & qos
ACE_ENV_ARG_DECL
)
{
CORBA::Any_var any
= Request_Context_Repository().get_cached_result(ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN(0);
FtRtecEventChannelAdmin::ObjectId *oid;
if (any.in() >>= oid) {
FtRtecEventChannelAdmin::ObjectId* result;
ACE_NEW_THROW_EX(result,
FtRtecEventChannelAdmin::ObjectId(*oid),
CORBA::NO_MEMORY());
return result;
}
ACE_NEW_THROW_EX(oid, FtRtecEventChannelAdmin::ObjectId, CORBA::NO_MEMORY());
FtRtecEventChannelAdmin::ObjectId_var object_id = oid;
Request_Context_Repository().generate_object_id(*oid ACE_ENV_ARG_PARAMETER);
obtain_push_consumer_and_connect(this,
object_id.in(),
push_supplier,
qos
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN(0);
return object_id._retn();
}
void TAO_FTEC_Event_Channel_Impl::disconnect_push_supplier (
const FtRtecEventChannelAdmin::ObjectId & oid
ACE_ENV_ARG_DECL
)
{
if (Request_Context_Repository().is_executed_request())
return;
TAO_FTEC_ProxyPushSupplier* proxy = this->find_proxy_push_supplier(oid);
if (proxy == NULL) // proxy not found
return;
ACE_CHECK;
proxy->disconnect_push_supplier(ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
}
void TAO_FTEC_Event_Channel_Impl::disconnect_push_consumer (
const FtRtecEventChannelAdmin::ObjectId & oid
ACE_ENV_ARG_DECL
)
{
if (Request_Context_Repository().is_executed_request())
return;
TAO_FTEC_ProxyPushConsumer* proxy = this->find_proxy_push_consumer(oid);
if (proxy == NULL) // proxy not found
return;
ACE_CHECK;
proxy->disconnect_push_consumer(ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
}
void TAO_FTEC_Event_Channel_Impl::suspend_push_supplier (
const FtRtecEventChannelAdmin::ObjectId & oid
ACE_ENV_ARG_DECL
)
{
if (Request_Context_Repository().is_executed_request())
return;
TAO_FTEC_ProxyPushSupplier* proxy = this->find_proxy_push_supplier(oid);
if (proxy == NULL) // proxy not found
ACE_THROW(FtRtecEventComm::InvalidObjectID());
ACE_CHECK;
proxy->suspend_connection(ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
}
void TAO_FTEC_Event_Channel_Impl::resume_push_supplier (
const FtRtecEventChannelAdmin::ObjectId & oid
ACE_ENV_ARG_DECL
)
{
if (Request_Context_Repository().is_executed_request())
return;
TAO_FTEC_ProxyPushSupplier* proxy = this->find_proxy_push_supplier(oid);
if (proxy == NULL) // proxy not found
ACE_THROW(FtRtecEventComm::InvalidObjectID());
ACE_CHECK;
proxy->resume_connection(ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
}
void TAO_FTEC_Event_Channel_Impl::push (
const FtRtecEventChannelAdmin::ObjectId & oid,
const RtecEventComm::EventSet & data
ACE_ENV_ARG_DECL
)
{
TAO_FTEC_ProxyPushConsumer* proxy = this->find_proxy_push_consumer(oid);
if (proxy == NULL) // proxy not found
ACE_THROW(FtRtecEventComm::InvalidObjectID());
proxy->push(data ACE_ENV_ARG_PARAMETER);
}
void TAO_FTEC_Event_Channel_Impl::get_state (
FtRtecEventChannelAdmin::EventChannelState & state
ACE_ENV_ARG_DECL
)
{
FtEventServiceInterceptor::instance()->get_state(state.cached_operation_results);
this->supplier_admin()->get_state(state.supplier_admin_state ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
this->consumer_admin()->get_state(state.consumer_admin_state ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
void TAO_FTEC_Event_Channel_Impl::set_state (const FTRT::State & stat
ACE_ENV_ARG_DECL)
{
FtRtecEventChannelAdmin::EventChannelState state;
TAO_InputCDR cdr((const char*)stat.get_buffer(), stat.length());
cdr >> state;
FtEventServiceInterceptor::instance()->set_state(state.cached_operation_results);
this->supplier_admin()->set_state(state.supplier_admin_state ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
this->consumer_admin()->set_state(state.consumer_admin_state ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
void TAO_FTEC_Event_Channel_Impl::set_update (const FTRT::State & s
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException, FTRT::InvalidUpdate))
{
FTRTEC::Replication_Service::instance()->check_validity(ACE_ENV_SINGLE_ARG_PARAMETER);
if (!Request_Context_Repository().is_executed_request()) {
TAO_InputCDR cdr((const char*)s.get_buffer(), s.length());
FtRtecEventChannelAdmin::Operation_var op(new FtRtecEventChannelAdmin::Operation);
if (!(cdr >> *op)) {
ACE_THROW(FTRT::InvalidUpdate() );
}
(update_table[op->param._d()])(this, *op ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
TAO_FTEC_ConsumerAdmin* TAO_FTEC_Event_Channel_Impl::consumer_admin (void) const
{
return static_cast<TAO_FTEC_ConsumerAdmin*>(TAO_EC_Event_Channel_Base::consumer_admin());
}
/// Access the supplier admin implementation, useful for controlling
/// the activation...
TAO_FTEC_SupplierAdmin* TAO_FTEC_Event_Channel_Impl::supplier_admin (void) const
{
return static_cast<TAO_FTEC_SupplierAdmin*>(TAO_EC_Event_Channel_Base::supplier_admin());
}
TAO_FTEC_ProxyPushSupplier*
TAO_FTEC_Event_Channel_Impl::find_proxy_push_supplier(const FtRtecEventChannelAdmin::ObjectId& id)
{
ACE_TRY_NEW_ENV {
PortableServer::POA_var poa = consumer_poa();
const PortableServer::Servant servant = poa->id_to_servant(
ACE_reinterpret_cast(const PortableServer::ObjectId& ,id)
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
POA_RtecEventChannelAdmin::ProxyPushSupplier_ptr obj =
ACE_reinterpret_cast (
POA_RtecEventChannelAdmin::ProxyPushSupplier_ptr,
servant->_downcast ("IDL:RtecEventChannelAdmin/ProxyPushSupplier:1.0")
);
return ACE_static_cast(TAO_FTEC_ProxyPushSupplier*, obj);
}
ACE_CATCHALL {
}
ACE_ENDTRY;
return 0;
}
TAO_FTEC_ProxyPushConsumer*
TAO_FTEC_Event_Channel_Impl::find_proxy_push_consumer(const FtRtecEventChannelAdmin::ObjectId& id)
{
ACE_TRY_NEW_ENV {
PortableServer::POA_var poa= supplier_poa();
const PortableServer::Servant servant = poa->id_to_servant(
ACE_reinterpret_cast(const PortableServer::ObjectId& ,id)
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
POA_RtecEventChannelAdmin::ProxyPushConsumer_ptr obj =
ACE_reinterpret_cast (
POA_RtecEventChannelAdmin::ProxyPushConsumer_ptr,
servant->_downcast ("IDL:RtecEventChannelAdmin/ProxyPushConsumer:1.0")
);
return ACE_static_cast(TAO_FTEC_ProxyPushConsumer*, obj);
}
ACE_CATCHALL {
}
ACE_ENDTRY;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -