📄 ftec_gateway.cpp
字号:
#include "FTEC_Gateway.h"
#include "activate_with_id.h"
#include "UUID.h"
#include "resolve_init.h"
#include "FtRtecEventCommS.h"
ACE_RCSID (Utils,
FTEC_Gateway,
"FTEC_Gateway.cpp,v 1.5 2003/11/24 04:07:41 huangming Exp")
#if !defined(__ACE_INLINE__)
#include "FTEC_Gateway.inl"
#endif /* __ACE_INLINE__ */
namespace TAO_FTRTEC {
class FTEC_Gateway_ConsumerAdmin
: public POA_RtecEventChannelAdmin::ConsumerAdmin
{
public:
FTEC_Gateway_ConsumerAdmin(FTEC_Gateway_Impl* impl);
~FTEC_Gateway_ConsumerAdmin();
// = The RtecEventChannelAdmin::ConsumerAdmin methods...
virtual RtecEventChannelAdmin::ProxyPushSupplier_ptr
obtain_push_supplier (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException));
FTEC_Gateway_Impl* impl_;
};
class FTEC_Gateway_SupplierAdmin
: public POA_RtecEventChannelAdmin::SupplierAdmin
{
public:
FTEC_Gateway_SupplierAdmin(FTEC_Gateway_Impl* impl);
~FTEC_Gateway_SupplierAdmin();
// = The RtecEventChannelAdmin::SupplierAdmin methods...
virtual RtecEventChannelAdmin::ProxyPushConsumer_ptr
obtain_push_consumer (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException));
FTEC_Gateway_Impl* impl_;
};
class FTEC_Gateway_ProxyPushSupplier
: public POA_RtecEventChannelAdmin::ProxyPushSupplier
{
public:
FTEC_Gateway_ProxyPushSupplier(FTEC_Gateway_Impl* impl);
~FTEC_Gateway_ProxyPushSupplier();
// = The RtecEventChannelAdmin::ProxyPushSupplier methods...
virtual void connect_push_consumer (
RtecEventComm::PushConsumer_ptr push_consumer,
const RtecEventChannelAdmin::ConsumerQOS &qos
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecEventChannelAdmin::AlreadyConnected,
RtecEventChannelAdmin::TypeError));
virtual void disconnect_push_supplier (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException));
virtual void suspend_connection (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException));
virtual void resume_connection (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException));
FTEC_Gateway_Impl* impl_;
};
class FTEC_Gateway_ProxyPushConsumer
: public POA_RtecEventChannelAdmin::ProxyPushConsumer
{
public:
FTEC_Gateway_ProxyPushConsumer(FTEC_Gateway_Impl* impl);
~FTEC_Gateway_ProxyPushConsumer();
virtual void push (const RtecEventComm::EventSet & data
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException));
// = The RtecEventChannelAdmin::ProxyPushConsumer methods...
virtual void connect_push_supplier (
RtecEventComm::PushSupplier_ptr push_supplier,
const RtecEventChannelAdmin::SupplierQOS& qos
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecEventChannelAdmin::AlreadyConnected));
virtual void disconnect_push_consumer (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException));
FTEC_Gateway_Impl* impl_;
};
class PushConsumerHandler : public POA_FtRtecEventComm::AMI_PushConsumerHandler
{
public:
PushConsumerHandler();
~PushConsumerHandler();
virtual void push (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException));
virtual void push_excep (FtRtecEventComm::AMI_PushConsumerExceptionHolder * excep_holder ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException));
};
struct FTEC_Gateway_Impl
{
CORBA::ORB_var orb;
PortableServer::POA_var poa;
FtRtecEventChannelAdmin::EventChannel_var ftec;
RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin;
RtecEventChannelAdmin::SupplierAdmin_var supplier_admin;
FTEC_Gateway_ConsumerAdmin consumer_admin_servant;
FTEC_Gateway_SupplierAdmin supplier_admin_servant;
FTEC_Gateway_ProxyPushSupplier proxy_supplier_servant;
FTEC_Gateway_ProxyPushConsumer proxy_consumer_servant;
PushConsumerHandler push_handler_servant;
FtRtecEventComm::AMI_PushConsumerHandler_var push_handler;
FTEC_Gateway_Impl();
};
FTEC_Gateway_Impl::FTEC_Gateway_Impl()
: consumer_admin_servant(this),
supplier_admin_servant(this),
proxy_supplier_servant(this),
proxy_consumer_servant(this)
{
}
FTEC_Gateway::FTEC_Gateway(CORBA::ORB_ptr orb, FtRtecEventChannelAdmin::EventChannel_ptr ftec)
: impl_(new FTEC_Gateway_Impl)
{
impl_->orb = CORBA::ORB::_duplicate(orb);
impl_->ftec = FtRtecEventChannelAdmin::EventChannel::_duplicate(ftec);
}
FTEC_Gateway::~FTEC_Gateway()
{
delete impl_;
}
RtecEventChannelAdmin::EventChannel_ptr
FTEC_Gateway::activate(PortableServer::POA_ptr poa ACE_ENV_ARG_DECL)
{
PortableServer::IdUniquenessPolicy_var id_uniqueness_policy =
poa->create_id_uniqueness_policy(PortableServer::MULTIPLE_ID
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN(0);
PortableServer::LifespanPolicy_var lifespan =
poa->create_lifespan_policy(PortableServer::PERSISTENT
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN(0);
// create a USER_ID IdAssignmentPolicy object
PortableServer::IdAssignmentPolicy_var assign =
poa->create_id_assignment_policy(PortableServer::USER_ID
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN(0);
CORBA::PolicyList policy_list;
policy_list.length(3);
policy_list[0] = PortableServer::IdUniquenessPolicy::_duplicate(
id_uniqueness_policy.in());
ACE_CHECK_RETURN(0);
policy_list[1]=
PortableServer::LifespanPolicy::_duplicate(lifespan.in());
ACE_CHECK_RETURN(0);
policy_list[2]=
PortableServer::IdAssignmentPolicy::_duplicate(assign.in());
ACE_CHECK_RETURN(0);
PortableServer::POAManager_var mgr = poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
impl_->poa = poa->create_POA("gateway_poa", mgr.in(), policy_list
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN(0);
id_uniqueness_policy->destroy();
lifespan->destroy();
assign->destroy();
FtRtecEventComm::ObjectId oid;
oid.length(16);
UUID::create(oid.get_buffer());
RtecEventChannelAdmin::EventChannel_var gateway;
activate_object_with_id(gateway.out(), impl_->poa, this, oid ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN(0);
++oid[9];
activate_object_with_id(impl_->consumer_admin.out(),
impl_->poa,
&impl_->consumer_admin_servant,
oid ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN(0);
++oid[9];
activate_object_with_id(impl_->supplier_admin.out(),
impl_->poa,
&impl_->supplier_admin_servant,
oid ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN(0);
return gateway._retn();
}
//= The RtecEventChannelAdmin::EventChannel methods
RtecEventChannelAdmin::ConsumerAdmin_ptr
FTEC_Gateway::for_consumers (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return RtecEventChannelAdmin::ConsumerAdmin::_duplicate(impl_->consumer_admin.in());
}
RtecEventChannelAdmin::SupplierAdmin_ptr
FTEC_Gateway::for_suppliers (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
ACE_DEBUG((LM_DEBUG, "FTEC_Gateway::for_suppliers\n"));
return RtecEventChannelAdmin::SupplierAdmin::_duplicate(impl_->supplier_admin.in());
}
void FTEC_Gateway::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
impl_->ftec->destroy();
}
RtecEventChannelAdmin::Observer_Handle
FTEC_Gateway::append_observer (RtecEventChannelAdmin::Observer_ptr observer
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((
CORBA::SystemException,
RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR,
RtecEventChannelAdmin::EventChannel::CANT_APPEND_OBSERVER))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -