summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/Notify/Bug_3688b_Regression/TestListener.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/Notify/Bug_3688b_Regression/TestListener.cpp')
-rw-r--r--TAO/orbsvcs/tests/Notify/Bug_3688b_Regression/TestListener.cpp107
1 files changed, 107 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/Notify/Bug_3688b_Regression/TestListener.cpp b/TAO/orbsvcs/tests/Notify/Bug_3688b_Regression/TestListener.cpp
new file mode 100644
index 00000000000..ef196c28fe9
--- /dev/null
+++ b/TAO/orbsvcs/tests/Notify/Bug_3688b_Regression/TestListener.cpp
@@ -0,0 +1,107 @@
+// $Id$
+#include "TestListener.h"
+
+TestListener::TestListener(
+ CORBA::ORB * p_orb,
+ std::string const & rc_channelIor,
+ std::string const & rc_filterExpression
+)
+{
+ CORBA::Object_var v_poa =
+ p_orb->resolve_initial_references("RootPOA");
+
+ mv_rootPOA = PortableServer::POA::_narrow (v_poa.in ());
+
+ PortableServer::ServantBase * p_servant = this;
+ mv_oid = mv_rootPOA->activate_object(p_servant);
+
+ mv_this = mv_rootPOA->id_to_reference(mv_oid.in());
+
+ CORBA::Object_var v_obj = p_orb->string_to_object(rc_channelIor.c_str());
+
+ mv_eventChannel = CosNotifyChannelAdmin::EventChannel::_narrow(v_obj.in());
+
+ mv_consumerAdmin = mv_eventChannel->new_for_consumers(
+ CosNotifyChannelAdmin::AND_OP,
+ m_consumerAdminId
+ );
+
+ CosNotifyFilter::FilterFactory_var v_filterFactory =
+ mv_eventChannel->default_filter_factory();
+
+ // setup a filter at the consumer admin
+ CosNotifyFilter::Filter_var v_filter =
+// v_filterFactory->create_filter("ETCL");
+ v_filterFactory->create_filter("EXTENDED_TCL");
+// v_filterFactory->create_filter("TCL");
+
+ CosNotifyFilter::ConstraintExpSeq constraintSeq(1);
+ constraintSeq.length(1);
+
+ // Set up constraint expression for new filter
+ constraintSeq[0].event_types.length(1);
+ constraintSeq[0].event_types[0].domain_name = "Test";
+ constraintSeq[0].event_types[0].type_name = "Data";
+ constraintSeq[0].constraint_expr = rc_filterExpression.c_str();
+
+ v_filter->add_constraints (constraintSeq);
+
+ mv_consumerAdmin->add_filter(v_filter.in());
+
+ v_obj = mv_rootPOA->id_to_reference(mv_oid.in());
+ mv_structuredPushConsumer = CosNotifyComm::StructuredPushConsumer::_narrow(v_obj.in());
+
+ CosNotifyChannelAdmin::ProxySupplier_var v_proxySupplier =
+ mv_consumerAdmin->obtain_notification_push_supplier(
+ CosNotifyChannelAdmin::STRUCTURED_EVENT,
+ m_proxySupplierId
+ );
+
+ mv_proxySupplier =
+ CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow(
+ v_proxySupplier.in()
+ );
+
+ mv_proxySupplier->connect_structured_push_consumer(mv_structuredPushConsumer.in());
+}
+
+
+TestListener::~TestListener()
+{
+ if(!CORBA::is_nil(mv_proxySupplier.in()))
+ {
+ // calls to disconnect_structured_push_supplier implicitely destroy
+ // the proxy, so we must set the proxy reference as nil.
+ mv_proxySupplier->disconnect_structured_push_supplier();
+ mv_proxySupplier = CosNotifyChannelAdmin::StructuredProxyPushSupplier_var();
+ }
+
+ if(!CORBA::is_nil(mv_structuredPushConsumer.in()) && !CORBA::is_nil(mv_rootPOA.in()))
+ {
+ mv_rootPOA->deactivate_object(mv_oid.in());
+ }
+}
+
+
+void TestListener::push_structured_event (
+ const CosNotification::StructuredEvent & notification
+)
+{
+ CORBA::Long data;
+ notification.remainder_of_body >>= data;
+
+ m_receivedData.push_back(data);
+}
+
+
+void TestListener::disconnect_structured_push_consumer ( )
+{
+}
+
+
+void TestListener::offer_change(
+ const CosNotification::EventTypeSeq & ,
+ const CosNotification::EventTypeSeq &
+)
+{
+}