summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Event/EC_ObserverStrategy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Event/EC_ObserverStrategy.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/EC_ObserverStrategy.cpp449
1 files changed, 0 insertions, 449 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_ObserverStrategy.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_ObserverStrategy.cpp
deleted file mode 100644
index 012486f7628..00000000000
--- a/TAO/orbsvcs/orbsvcs/Event/EC_ObserverStrategy.cpp
+++ /dev/null
@@ -1,449 +0,0 @@
-// $Id$
-
-#include "EC_ObserverStrategy.h"
-#include "EC_Event_Channel.h"
-#include "EC_ProxySupplier.h"
-#include "EC_ProxyConsumer.h"
-#include "EC_ConsumerAdmin.h"
-#include "EC_SupplierAdmin.h"
-#include "orbsvcs/Event_Service_Constants.h"
-#include "ace/Synch.h"
-#include "ace/Auto_Ptr.h"
-
-#if ! defined (__ACE_INLINE__)
-#include "EC_ObserverStrategy.i"
-#endif /* __ACE_INLINE__ */
-
-ACE_RCSID(Event, EC_ObserverStrategy, "$Id$")
-
-TAO_EC_ObserverStrategy::~TAO_EC_ObserverStrategy (void)
-{
-}
-
-// ****************************************************************
-
-RtecEventChannelAdmin::Observer_Handle
-TAO_EC_Null_ObserverStrategy::append_observer (
- RtecEventChannelAdmin::Observer_ptr,
- CORBA::Environment &ACE_TRY_ENV)
- ACE_THROW_SPEC ((
- CORBA::SystemException,
- RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR,
- RtecEventChannelAdmin::EventChannel::CANT_APPEND_OBSERVER))
-{
- ACE_THROW_RETURN (
- RtecEventChannelAdmin::EventChannel::CANT_APPEND_OBSERVER(),
- 0);
-}
-
-void
-TAO_EC_Null_ObserverStrategy::remove_observer (
- RtecEventChannelAdmin::Observer_Handle,
- CORBA::Environment &ACE_TRY_ENV)
- ACE_THROW_SPEC ((
- CORBA::SystemException,
- RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR,
- RtecEventChannelAdmin::EventChannel::CANT_REMOVE_OBSERVER))
-{
- ACE_THROW (RtecEventChannelAdmin::EventChannel::CANT_REMOVE_OBSERVER());
-}
-
-void
-TAO_EC_Null_ObserverStrategy::connected (TAO_EC_ProxyPushConsumer*,
- CORBA::Environment &)
-{
-}
-
-void
-TAO_EC_Null_ObserverStrategy::disconnected (TAO_EC_ProxyPushConsumer*,
- CORBA::Environment &)
-{
-}
-
-void
-TAO_EC_Null_ObserverStrategy::connected (TAO_EC_ProxyPushSupplier*,
- CORBA::Environment &)
-{
-}
-
-void
-TAO_EC_Null_ObserverStrategy::disconnected (TAO_EC_ProxyPushSupplier*,
- CORBA::Environment &)
-{
-}
-
-// ****************************************************************
-
-TAO_EC_Basic_ObserverStrategy::~TAO_EC_Basic_ObserverStrategy (void)
-{
- delete this->lock_;
- this->lock_ = 0;
-}
-
-RtecEventChannelAdmin::Observer_Handle
-TAO_EC_Basic_ObserverStrategy::append_observer (
- RtecEventChannelAdmin::Observer_ptr obs,
- CORBA::Environment &ACE_TRY_ENV)
- ACE_THROW_SPEC ((
- CORBA::SystemException,
- RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR,
- RtecEventChannelAdmin::EventChannel::CANT_APPEND_OBSERVER))
-{
- {
- ACE_GUARD_THROW_EX (
- ACE_Lock, ace_mon, *this->lock_,
- RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR());
- ACE_CHECK_RETURN (0);
-
- this->handle_generator_++;
- Observer_Entry entry (this->handle_generator_,
- RtecEventChannelAdmin::Observer::_duplicate (obs));
-
- if (this->observers_.bind (entry.handle, entry) == -1)
- ACE_THROW_RETURN (
- RtecEventChannelAdmin::EventChannel::CANT_APPEND_OBSERVER(),
- 0);
- }
-
- RtecEventChannelAdmin::ConsumerQOS c_qos;
- this->fill_qos (c_qos, ACE_TRY_ENV);
- ACE_CHECK_RETURN (0);
- obs->update_consumer (c_qos, ACE_TRY_ENV);
- ACE_CHECK_RETURN (0);
-
- RtecEventChannelAdmin::SupplierQOS s_qos;
- this->fill_qos (s_qos, ACE_TRY_ENV);
- ACE_CHECK_RETURN (0);
- obs->update_supplier (s_qos, ACE_TRY_ENV);
- ACE_CHECK_RETURN (0);
-
- return this->handle_generator_;
-}
-
-
-void
-TAO_EC_Basic_ObserverStrategy::remove_observer (
- RtecEventChannelAdmin::Observer_Handle handle,
- CORBA::Environment &ACE_TRY_ENV)
- ACE_THROW_SPEC ((
- CORBA::SystemException,
- RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR,
- RtecEventChannelAdmin::EventChannel::CANT_REMOVE_OBSERVER))
-{
- ACE_GUARD_THROW_EX (ACE_Lock, ace_mon, *this->lock_,
- RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR());
- ACE_CHECK;
-
- if (this->observers_.unbind (handle) == -1)
- ACE_THROW (
- RtecEventChannelAdmin::EventChannel::CANT_REMOVE_OBSERVER());
-}
-
-void
-TAO_EC_Basic_ObserverStrategy::connected (
- TAO_EC_ProxyPushConsumer *consumer,
- CORBA::Environment &ACE_TRY_ENV)
-{
- if (consumer->publications ().is_gateway)
- return;
-
- RtecEventChannelAdmin::SupplierQOS s_qos;
- this->fill_qos (s_qos, ACE_TRY_ENV);
- ACE_CHECK;
-
- int size = 0;
- ACE_Auto_Basic_Array_Ptr<RtecEventChannelAdmin::Observer_var> copy;
- {
- ACE_GUARD_THROW_EX (ACE_Lock, ace_mon, *this->lock_,
- RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR());
- ACE_CHECK;
- size = this->observers_.current_size ();
- RtecEventChannelAdmin::Observer_var *tmp;
- ACE_NEW (tmp, RtecEventChannelAdmin::Observer_var[size]);
- copy.reset (tmp);
-
- Observer_Map_Iterator end = this->observers_.end ();
- int j = 0;
- for (Observer_Map_Iterator i = this->observers_.begin ();
- i != end;
- ++i)
- {
- Observer_Entry& entry = (*i).int_id_;
- copy[j++] =
- RtecEventChannelAdmin::Observer::_duplicate (entry.observer.in ());
- }
- }
-
- for (int i = 0; i != size; ++i)
- {
- copy[i]->update_supplier (s_qos, ACE_TRY_ENV);
- ACE_CHECK;
- }
-}
-
-void
-TAO_EC_Basic_ObserverStrategy::disconnected (
- TAO_EC_ProxyPushConsumer* consumer,
- CORBA::Environment &ACE_TRY_ENV)
-{
- if (consumer->publications ().is_gateway)
- return;
-
- RtecEventChannelAdmin::SupplierQOS s_qos;
- this->fill_qos (s_qos, ACE_TRY_ENV);
- ACE_CHECK;
-
- int size = 0;
- ACE_Auto_Basic_Array_Ptr<RtecEventChannelAdmin::Observer_var> copy;
- {
- ACE_GUARD_THROW_EX (ACE_Lock, ace_mon, *this->lock_,
- RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR());
- ACE_CHECK;
- size = this->observers_.current_size ();
- RtecEventChannelAdmin::Observer_var *tmp;
- ACE_NEW (tmp, RtecEventChannelAdmin::Observer_var[size]);
- copy.reset (tmp);
-
- Observer_Map_Iterator end = this->observers_.end ();
- int j = 0;
- for (Observer_Map_Iterator i = this->observers_.begin ();
- i != end;
- ++i)
- {
- Observer_Entry& entry = (*i).int_id_;
- copy[j++] =
- RtecEventChannelAdmin::Observer::_duplicate (entry.observer.in ());
- }
- }
-
- for (int i = 0; i != size; ++i)
- {
- copy[i]->update_supplier (s_qos, ACE_TRY_ENV);
- ACE_CHECK;
- }
-}
-
-void
-TAO_EC_Basic_ObserverStrategy::connected (
- TAO_EC_ProxyPushSupplier* supplier,
- CORBA::Environment &ACE_TRY_ENV)
-{
- if (supplier->subscriptions ().is_gateway)
- return;
-
- RtecEventChannelAdmin::ConsumerQOS c_qos;
- this->fill_qos (c_qos, ACE_TRY_ENV);
- ACE_CHECK;
-
- int size = 0;
- ACE_Auto_Basic_Array_Ptr<RtecEventChannelAdmin::Observer_var> copy;
- {
- ACE_GUARD_THROW_EX (ACE_Lock, ace_mon, *this->lock_,
- RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR());
- ACE_CHECK;
- size = this->observers_.current_size ();
- RtecEventChannelAdmin::Observer_var *tmp;
- ACE_NEW (tmp, RtecEventChannelAdmin::Observer_var[size]);
- copy.reset (tmp);
-
- Observer_Map_Iterator end = this->observers_.end ();
- int j = 0;
- for (Observer_Map_Iterator i = this->observers_.begin ();
- i != end;
- ++i)
- {
- Observer_Entry& entry = (*i).int_id_;
- copy[j++] =
- RtecEventChannelAdmin::Observer::_duplicate (entry.observer.in ());
- }
- }
-
- for (int i = 0; i != size; ++i)
- {
- copy[i]->update_consumer (c_qos, ACE_TRY_ENV);
- ACE_CHECK;
- }
-}
-
-void
-TAO_EC_Basic_ObserverStrategy::disconnected (
- TAO_EC_ProxyPushSupplier* supplier,
- CORBA::Environment &ACE_TRY_ENV)
-{
- if (supplier->subscriptions ().is_gateway)
- return;
-
- RtecEventChannelAdmin::ConsumerQOS c_qos;
- this->fill_qos (c_qos, ACE_TRY_ENV);
- ACE_CHECK;
-
- int size = 0;
- ACE_Auto_Basic_Array_Ptr<RtecEventChannelAdmin::Observer_var> copy;
- {
- ACE_GUARD_THROW_EX (ACE_Lock, ace_mon, *this->lock_,
- RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR());
- ACE_CHECK;
- size = this->observers_.current_size ();
- RtecEventChannelAdmin::Observer_var *tmp;
- ACE_NEW (tmp, RtecEventChannelAdmin::Observer_var[size]);
- copy.reset (tmp);
-
- Observer_Map_Iterator end = this->observers_.end ();
- int j = 0;
- for (Observer_Map_Iterator i = this->observers_.begin ();
- i != end;
- ++i)
- {
- Observer_Entry& entry = (*i).int_id_;
- copy[j++] =
- RtecEventChannelAdmin::Observer::_duplicate (entry.observer.in ());
- }
- }
-
- for (int i = 0; i != size; ++i)
- {
- copy[i]->update_consumer (c_qos, ACE_TRY_ENV);
- ACE_CHECK;
- }
-}
-
-void
-TAO_EC_Basic_ObserverStrategy::fill_qos (
- RtecEventChannelAdmin::ConsumerQOS &qos,
- CORBA::Environment &ACE_TRY_ENV)
-{
- Headers headers;
-
- {
- ACE_GUARD_THROW_EX (TAO_EC_ConsumerAdmin::Busy_Lock,
- ace_mon, this->event_channel_->consumer_admin ()->busy_lock (),
- RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR ());
- ACE_CHECK;
-
- TAO_EC_ConsumerAdmin::SupplierSetIterator end =
- this->event_channel_->consumer_admin ()->end ();
- for (TAO_EC_ConsumerAdmin::SupplierSetIterator i =
- this->event_channel_->consumer_admin ()->begin ();
- i != end;
- ++i)
- {
- TAO_EC_ProxyPushSupplier* supplier = *i;
-
- const RtecEventChannelAdmin::ConsumerQOS& sub =
- supplier->subscriptions ();
- if (sub.is_gateway)
- continue;
- for (CORBA::ULong j = 0; j < sub.dependencies.length (); ++j)
- {
- const RtecEventComm::Event& event =
- sub.dependencies[j].event;
- RtecEventComm::EventType type = event.header.type;
-
- if (0 < type && type < ACE_ES_EVENT_UNDEFINED)
- continue;
- headers.insert (event.header, 1);
- }
- }
- }
- CORBA::ULong count = 1;
- HeadersIterator i (headers);
- for (i.first (); !i.is_done (); i.next ())
- {
- count++;
- }
-
- RtecEventChannelAdmin::DependencySet& dep = qos.dependencies;
-
- dep.length (count);
-
- dep[0].event.header.type = ACE_ES_DISJUNCTION_DESIGNATOR;
- dep[0].event.header.source = 0;
- dep[0].event.header.creation_time = ORBSVCS_Time::zero ();
- dep[0].rt_info = 0;
- count = 1;
- for (i.first (); !i.is_done (); i.next ())
- {
- qos.dependencies[count++].event.header = *i.key ();
- }
-}
-
-void
-TAO_EC_Basic_ObserverStrategy::fill_qos (
- RtecEventChannelAdmin::SupplierQOS &qos,
- CORBA::Environment &)
-{
- Headers headers;
-
- {
- // @@ TODO locking in the consumer admin?
- TAO_EC_SupplierAdmin::ConsumerSetIterator end =
- this->event_channel_->supplier_admin ()->end ();
- for (TAO_EC_SupplierAdmin::ConsumerSetIterator i =
- this->event_channel_->supplier_admin ()->begin ();
- i != end;
- ++i)
- {
- TAO_EC_ProxyPushConsumer* consumer = *i;
- const RtecEventChannelAdmin::SupplierQOS& pub =
- consumer->publications ();
- if (pub.is_gateway)
- continue;
- for (CORBA::ULong j = 0; j < pub.publications.length (); ++j)
- {
- const RtecEventComm::Event& event =
- pub.publications[j].event;
- RtecEventComm::EventType type = event.header.type;
-
- if (0 < type && type < ACE_ES_EVENT_UNDEFINED)
- continue;
- headers.insert (event.header, 1);
- }
- }
- }
- CORBA::ULong count = 0;
- HeadersIterator i (headers);
- for (i.first (); !i.is_done (); i.next ())
- {
- count++;
- }
- qos.publications.length (count);
- count = 0;
- for (i.first (); !i.is_done (); i.next ())
- {
- qos.publications[count++].event.header = *i.key ();
- }
-}
-
-#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-
-template class ACE_Map_Manager<RtecEventChannelAdmin::Observer_Handle,TAO_EC_Basic_ObserverStrategy::Observer_Entry,ACE_Null_Mutex>;
-template class ACE_Map_Iterator<RtecEventChannelAdmin::Observer_Handle,TAO_EC_Basic_ObserverStrategy::Observer_Entry,ACE_Null_Mutex>;
-template class ACE_Map_Iterator_Base<RtecEventChannelAdmin::Observer_Handle,TAO_EC_Basic_ObserverStrategy::Observer_Entry,ACE_Null_Mutex>;
-template class ACE_Map_Reverse_Iterator<RtecEventChannelAdmin::Observer_Handle,TAO_EC_Basic_ObserverStrategy::Observer_Entry,ACE_Null_Mutex>;
-template class ACE_Map_Entry<RtecEventChannelAdmin::Observer_Handle,TAO_EC_Basic_ObserverStrategy::Observer_Entry>;
-
-template class ACE_RB_Tree<RtecEventComm::EventHeader,int,TAO_EC_Basic_ObserverStrategy::Header_Compare,ACE_Null_Mutex>;
-template class ACE_RB_Tree_Iterator_Base<RtecEventComm::EventHeader,int,TAO_EC_Basic_ObserverStrategy::Header_Compare,ACE_Null_Mutex>;
-template class ACE_RB_Tree_Iterator<RtecEventComm::EventHeader,int,TAO_EC_Basic_ObserverStrategy::Header_Compare,ACE_Null_Mutex>;
-template class ACE_RB_Tree_Reverse_Iterator<RtecEventComm::EventHeader,int,TAO_EC_Basic_ObserverStrategy::Header_Compare,ACE_Null_Mutex>;
-template class ACE_RB_Tree_Node<RtecEventComm::EventHeader,int>;
-
-template class ACE_Auto_Basic_Array_Ptr<RtecEventChannelAdmin::Observer_var>;
-
-#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-
-#pragma instantiate ACE_Map_Manager<RtecEventChannelAdmin::Observer_Handle,TAO_EC_Basic_ObserverStrategy::Observer_Entry,ACE_Null_Mutex>
-#pragma instantiate ACE_Map_Iterator<RtecEventChannelAdmin::Observer_Handle,TAO_EC_Basic_ObserverStrategy::Observer_Entry,ACE_Null_Mutex>
-#pragma instantiate ACE_Map_Iterator_Base<RtecEventChannelAdmin::Observer_Handle,TAO_EC_Basic_ObserverStrategy::Observer_Entry,ACE_Null_Mutex>
-#pragma instantiate ACE_Map_Reverse_Iterator<RtecEventChannelAdmin::Observer_Handle,TAO_EC_Basic_ObserverStrategy::Observer_Entry,ACE_Null_Mutex>
-#pragma instantiate ACE_Map_Entry<RtecEventChannelAdmin::Observer_Handle,TAO_EC_Basic_ObserverStrategy::Observer_Entry>
-
-#pragma instantiate ACE_RB_Tree<RtecEventComm::EventHeader,int,TAO_EC_Basic_ObserverStrategy::Header_Compare,ACE_Null_Mutex>
-#pragma instantiate ACE_RB_Tree_Iterator_Base<RtecEventComm::EventHeader,int,TAO_EC_Basic_ObserverStrategy::Header_Compare,ACE_Null_Mutex>
-#pragma instantiate ACE_RB_Tree_Iterator<RtecEventComm::EventHeader,int,TAO_EC_Basic_ObserverStrategy::Header_Compare,ACE_Null_Mutex>
-#pragma instantiate ACE_RB_Tree_Reverse_Iterator<RtecEventComm::EventHeader,int,TAO_EC_Basic_ObserverStrategy::Header_Compare,ACE_Null_Mutex>
-#pragma instantiate ACE_RB_Tree_Node<RtecEventComm::EventHeader,int>
-
-#pragma instantiate ACE_Auto_Basic_Array_Ptr<RtecEventChannelAdmin::Observer_var>
-
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */