summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/Notify/Bug_3688b_Regression/TestBroadcaster.cpp
blob: f65a42384d2a8a661a14b427f860ca4578068c21 (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
125
// $Id$
#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 */