summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Event/ECG_UDP_Receiver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Event/ECG_UDP_Receiver.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/ECG_UDP_Receiver.cpp250
1 files changed, 0 insertions, 250 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Event/ECG_UDP_Receiver.cpp b/TAO/orbsvcs/orbsvcs/Event/ECG_UDP_Receiver.cpp
deleted file mode 100644
index 1a492f72d66..00000000000
--- a/TAO/orbsvcs/orbsvcs/Event/ECG_UDP_Receiver.cpp
+++ /dev/null
@@ -1,250 +0,0 @@
-// $Id$
-
-#include "orbsvcs/Event/ECG_UDP_Receiver.h"
-#include "orbsvcs/Event_Utilities.h"
-#include "ace/SString.h"
-
-#if !defined(__ACE_INLINE__)
-#include "orbsvcs/Event/ECG_UDP_Receiver.i"
-#endif /* __ACE_INLINE__ */
-
-ACE_RCSID (Event,
- ECG_UDP_Receiver,
- "$Id$")
-
-
-// ****************************************************************
-
-TAO_BEGIN_VERSIONED_NAMESPACE_DECL
-
-TAO_ECG_UDP_Receiver::~TAO_ECG_UDP_Receiver (void)
-{
- this->consumer_proxy_ =
- RtecEventChannelAdmin::ProxyPushConsumer::_nil ();
-
- if (this->handler_rptr_.get ())
- this->handler_rptr_->shutdown ();
-}
-
-void
-TAO_ECG_UDP_Receiver::init (RtecEventChannelAdmin::EventChannel_ptr lcl_ec,
- TAO_ECG_Refcounted_Endpoint ignore_from,
- RtecUDPAdmin::AddrServer_ptr addr_server
- ACE_ENV_ARG_DECL)
-{
- // Verify arguments.
- // <addr_server> is allowed to be nil. But then, if get_addr () method
- // is invoked, it throws an exception.
- if (CORBA::is_nil (lcl_ec))
- {
- ACE_ERROR ((LM_ERROR,
- "TAO_ECG_UDP_Receiver::init(): "
- "<lcl_ec> argument is nil.\n"));
- ACE_THROW (CORBA::INTERNAL ());
- }
-
- this->cdr_receiver_.init (ignore_from);
-
- this->lcl_ec_ =
- RtecEventChannelAdmin::EventChannel::_duplicate (lcl_ec);
-
- this->addr_server_ =
- RtecUDPAdmin::AddrServer::_duplicate (addr_server);
-}
-
-void
-TAO_ECG_UDP_Receiver::connect (const RtecEventChannelAdmin::SupplierQOS& pub
- ACE_ENV_ARG_DECL)
-{
- if (CORBA::is_nil (this->lcl_ec_.in ()))
- {
- ACE_ERROR ((LM_ERROR,
- "Error initializing TAO_ECG_UDP_Receiver: "
- "init() hasn't been called before connect().\n"));
- ACE_THROW (CORBA::INTERNAL ());
- }
-
- if (pub.publications.length () == 0)
- {
- ACE_ERROR ((LM_ERROR,
- "TAO_ECG_UDP_Receiver::connect(): "
- "0-length publications argument.\n"));
- ACE_THROW (CORBA::INTERNAL ());
- }
-
- if (CORBA::is_nil (this->consumer_proxy_.in ()))
- {
- this->new_connect (pub ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
- else
- {
- this->reconnect (pub ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
-}
-
-void
-TAO_ECG_UDP_Receiver::new_connect (const RtecEventChannelAdmin::SupplierQOS& pub
- ACE_ENV_ARG_DECL)
-{
- // Activate with poa.
- RtecEventComm::PushSupplier_var supplier_ref;
- PortableServer::POA_var poa = this->_default_POA ();
-
- TAO_EC_Object_Deactivator deactivator;
- activate (supplier_ref,
- poa.in (),
- this,
- deactivator
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- // Connect as a supplier to the local EC.
- RtecEventChannelAdmin::SupplierAdmin_var supplier_admin =
- this->lcl_ec_->for_suppliers (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
-
- RtecEventChannelAdmin::ProxyPushConsumer_var proxy =
- supplier_admin->obtain_push_consumer (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
- ECG_Receiver_Auto_Proxy_Disconnect new_proxy_disconnect (proxy.in ());
-
- proxy->connect_push_supplier (supplier_ref.in (),
- pub
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- // Update resource managers.
- this->consumer_proxy_ = proxy._retn ();
- this->auto_proxy_disconnect_.set_command (new_proxy_disconnect);
- this->set_deactivator (deactivator);
-}
-
-void
-TAO_ECG_UDP_Receiver::reconnect (const RtecEventChannelAdmin::SupplierQOS& pub
- ACE_ENV_ARG_DECL)
-{
- // Obtain our object reference from the POA.
- RtecEventComm::PushSupplier_var supplier_ref;
- PortableServer::POA_var poa = this->_default_POA ();
-
- CORBA::Object_var obj = poa->servant_to_reference (this ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- supplier_ref =
- RtecEventComm::PushSupplier::_narrow (obj.in () ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- if (CORBA::is_nil (supplier_ref.in ()))
- {
- ACE_THROW (CORBA::INTERNAL ());
- }
-
- // Reconnect.
- this->consumer_proxy_->connect_push_supplier (supplier_ref.in (),
- pub
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-}
-
-void
-TAO_ECG_UDP_Receiver::disconnect_push_supplier (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- // Prevent attempts to disconnect.
- this->auto_proxy_disconnect_.disallow_command ();
-
- this->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
-}
-
-void
-TAO_ECG_UDP_Receiver::shutdown (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
-{
- if (this->handler_rptr_.get ())
- this->handler_rptr_->shutdown ();
- TAO_ECG_Refcounted_Handler empty_handler_rptr;
- this->handler_rptr_ = empty_handler_rptr;
-
- this->consumer_proxy_ =
- RtecEventChannelAdmin::ProxyPushConsumer::_nil ();
-
- this->auto_proxy_disconnect_.execute ();
-
- this->deactivator_.deactivate ();
-
- this->cdr_receiver_.shutdown ();
-}
-
-// Helper class for using <cdr_receiver_>.
-class TAO_ECG_Event_CDR_Decoder: public TAO_ECG_CDR_Processor
-{
-public:
- virtual int decode (TAO_InputCDR &cdr);
-
- RtecEventComm::EventSet events;
-};
-
-int
-TAO_ECG_Event_CDR_Decoder::decode (TAO_InputCDR &cdr)
-{
- if (!(cdr >> this->events))
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "Error decoding events cdr.\n"),
- -1);
- }
- return 0;
-}
-
-int
-TAO_ECG_UDP_Receiver::handle_input (ACE_SOCK_Dgram& dgram)
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- // Make sure we are connected to the Event Channel before proceeding
- // any further.
- if (CORBA::is_nil (this->consumer_proxy_.in ()))
- {
- ACE_ERROR ((LM_ERROR,
- "TAO_ECG_UDP_Receiver::handle_input() "
- "called but the Receiver is not connected "
- "to an event channel. Shutting down the Receiver.\n"));
- this->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- return 0;
- }
-
- // Receive data.
- TAO_ECG_Event_CDR_Decoder cdr_decoder;
- int result = this->cdr_receiver_.handle_input (dgram, &cdr_decoder);
-
- if (result == 0)
- // No data to act on.
- {
- return 0;
- }
- if (result == -1)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "Error receiving multicasted events.\n"),
- 0);
- }
-
- this->consumer_proxy_->push (cdr_decoder.events ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
-
- ACE_CATCHANY
- {
- ACE_DEBUG ((LM_ERROR,
- "Caught and swallowed EXCEPTION in "
- "ECG_UDP_Receiver::handle_input: %s\n",
- ACE_ANY_EXCEPTION._info ().c_str ()));
- }
- ACE_ENDTRY;
- return 0;
-}
-
-TAO_END_VERSIONED_NAMESPACE_DECL