blob: 596cb624502b41653ff650b18d09dfc1ec74c0f3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
#include "TestBroadcaster.h"
TestBroadcaster::TestBroadcaster()
{
} /* end of TestBroadcaster::TestBroadcaster */
TestBroadcaster::~TestBroadcaster()
throw()
{
// ensure nothrow guarantee
try
{
disconnect();
} /* end of try */
catch(...)
{
}
} /* end of TestBroadcaster::~TestBroadcaster */
bool TestBroadcaster::connect(
CORBA::ORB_ptr p_orb,
std::string const & rc_channelIor
)
{
try
{
CosNotifyChannelAdmin::EventChannel_var v_eventChannel;
CosNotifyChannelAdmin::SupplierAdmin_var v_supplierAdmin;
CosNotifyChannelAdmin::ProxyConsumer_var v_proxyConsumer;
CosNotifyChannelAdmin::AdminID supplierAdminId;
CosNotifyChannelAdmin::ProxyID proxyConsumerId;
CORBA::Object_var v_obj = p_orb->string_to_object(rc_channelIor.c_str());
v_eventChannel = CosNotifyChannelAdmin::EventChannel::_narrow(v_obj.in());
v_supplierAdmin =
v_eventChannel->new_for_suppliers (
CosNotifyChannelAdmin::OR_OP,
supplierAdminId
);
v_proxyConsumer = v_supplierAdmin->obtain_notification_push_consumer(
CosNotifyChannelAdmin::SEQUENCE_EVENT,
proxyConsumerId
);
mv_sequenceProxyPushConsumer =
CosNotifyChannelAdmin::SequenceProxyPushConsumer::_narrow(
v_proxyConsumer.in()
);
mv_sequenceProxyPushConsumer->connect_sequence_push_supplier(
CosNotifyComm::SequencePushSupplier::_nil()
);
}
catch(...)
{
return false;
}
return true;
} /* end of TestBroadcaster::connect */
bool TestBroadcaster::disconnect()
{
try
{
if(isConnected())
{
mv_sequenceProxyPushConsumer->disconnect_sequence_push_consumer();
mv_sequenceProxyPushConsumer = CosNotifyChannelAdmin::SequenceProxyPushConsumer_var();
}
} /* end of try */
catch(...)
{
return false;
}
return true;
} /* end of TestBroadcaster::disconnect */
bool TestBroadcaster::sendData( )
{
try
{
CosNotification::EventBatch events;
events.length(5);
for (CORBA::ULong idx = 0, max = events.length(); idx < max; ++idx)
{
events[idx].header.fixed_header.event_type.domain_name = "Test";
events[idx].header.fixed_header.event_type.type_name = "Data";
events[idx].header.fixed_header.event_name = "Info";
events[idx].header.variable_header.length(0);
// provide filter criteria
events[idx].filterable_data.length(1);
events[idx].filterable_data[0].name = "data";
events[idx].filterable_data[0].value <<= idx;
events[idx].remainder_of_body <<= idx;
} /* end of for */
mv_sequenceProxyPushConsumer->push_structured_events(events);
}
catch(...)
{
return false;
}
return true;
} /* end of TestBroadcaster::sendData */
bool TestBroadcaster::isConnected() const
{
return !CORBA::is_nil(mv_sequenceProxyPushConsumer.in());
} /* end of TestBroadcaster::isConnected */
|