1
// FTEC_ProxyConsumer.cpp,v 1.5 2003/11/24 04:07:41 huangming Exp
3
#include "FTEC_ProxyConsumer.h"
4
#include "Request_Context_Repository.h"
5
#include "Replication_Service.h"
6
#include "../Utils/activate_with_id.h"
8
ACE_RCSID (EventChannel,
9
TAO_FTEC_ProxyPushConsumer,
10
"FTEC_ProxyConsumer.cpp,v 1.5 2003/11/24 04:07:41 huangming Exp")
12
const TAO_FTEC_ProxyPushConsumer::RollbackOperation
13
TAO_FTEC_ProxyPushConsumer::rollback_obtain =
14
&FtRtecEventChannelAdmin::EventChannelFacade::disconnect_push_consumer;
16
TAO_FTEC_ProxyPushConsumer::TAO_FTEC_ProxyPushConsumer (TAO_EC_Event_Channel_Base* event_channel)
17
: Inherited(event_channel)
22
const FtRtecEventChannelAdmin::ObjectId&
23
TAO_FTEC_ProxyPushConsumer::id() const
25
return object_id_.in();
29
/// Activate in the POA
31
TAO_FTEC_ProxyPushConsumer::activate (
32
RtecEventChannelAdmin::ProxyPushConsumer_ptr &result
34
ACE_THROW_SPEC ((CORBA::SystemException))
36
result = RtecEventChannelAdmin::ProxyPushConsumer::_nil();
38
object_id_ = Request_Context_Repository().get_object_id(ACE_ENV_SINGLE_ARG_PARAMETER);
40
PortableServer::POA_var poa = _default_POA(ACE_ENV_SINGLE_ARG_PARAMETER);
42
activate_object_with_id(result, poa.in(), this, object_id_ ACE_ENV_ARG_PARAMETER);
47
ACE_PRINT_EXCEPTION(ACE_ANY_EXCEPTION, "");
53
// = The RtecEventChannelAdmin::ProxyPushConsumer methods...
54
void TAO_FTEC_ProxyPushConsumer::connect_push_supplier (
55
RtecEventComm::PushSupplier_ptr push_supplier,
56
const RtecEventChannelAdmin::SupplierQOS& qos
58
ACE_THROW_SPEC ((CORBA::SystemException,
59
RtecEventChannelAdmin::AlreadyConnected))
61
if (Request_Context_Repository().is_executed_request())
64
FtRtecEventChannelAdmin::Operation update;
65
update.object_id = this->id();
66
FtRtecEventChannelAdmin::Connect_push_supplier_param param;
67
param.push_supplier = RtecEventComm::PushSupplier::_duplicate(push_supplier);
69
update.param.connect_supplier_param(param);
71
Inherited::connect_push_supplier(push_supplier, qos ACE_ENV_ARG_PARAMETER);
75
FTRTEC::Replication_Service* svc = FTRTEC::Replication_Service::instance();
76
ACE_Read_Guard<FTRTEC::Replication_Service> locker(*svc);
78
svc->replicate_request(update,
79
&FtRtecEventChannelAdmin::EventChannelFacade::disconnect_push_consumer
80
ACE_ENV_ARG_PARAMETER);
84
this->disconnect_push_consumer(ACE_ENV_SINGLE_ARG_PARAMETER);
91
void TAO_FTEC_ProxyPushConsumer::disconnect_push_consumer (ACE_ENV_SINGLE_ARG_DECL)
92
ACE_THROW_SPEC ((CORBA::SystemException))
94
if (Request_Context_Repository().is_executed_request())
96
FtRtecEventChannelAdmin::Operation update;
97
update.object_id = id();
98
update.param._d(FtRtecEventChannelAdmin::DISCONNECT_PUSH_CONSUMER);
100
Inherited::disconnect_push_consumer(ACE_ENV_SINGLE_ARG_PARAMETER);
103
FTRTEC::Replication_Service* svc = FTRTEC::Replication_Service::instance();
104
ACE_Read_Guard<FTRTEC::Replication_Service> locker(*svc);
106
svc->replicate_request(update, 0 ACE_ENV_ARG_PARAMETER);
110
void TAO_FTEC_ProxyPushConsumer::get_state(FtRtecEventChannelAdmin::ProxyPushConsumerStat& state)
112
state.object_id = this->object_id_;
113
if (this->is_connected()) {
114
FtRtecEventChannelAdmin::ProxyPushConsumerConnectionInfo info;
115
info.push_supplier = this->supplier();
116
info.qos = this->publications();
117
state.parameter.info(info);
121
void TAO_FTEC_ProxyPushConsumer::set_state(const FtRtecEventChannelAdmin::ProxyPushConsumerStat& state
124
if (!CORBA::is_nil(state.parameter.info().push_supplier.in()) )
126
Inherited::connect_push_supplier(state.parameter.info().push_supplier.in(),
127
state.parameter.info().qos
128
ACE_ENV_ARG_PARAMETER);