summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/CosEvent/CEC_Dispatching_Task.cpp
diff options
context:
space:
mode:
authorcoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-02-12 21:52:37 +0000
committercoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-02-12 21:52:37 +0000
commit02e85d62350ef16eddb97071a0e834bd973204d7 (patch)
tree3c710175f73f195dac276bcab90ff6e98c52686a /TAO/orbsvcs/orbsvcs/CosEvent/CEC_Dispatching_Task.cpp
parentc5f9d9720aa2bdf7e356d9cec96e16b121972587 (diff)
downloadATCD-02e85d62350ef16eddb97071a0e834bd973204d7.tar.gz
ChangeLogTag:Sat Feb 12 13:37:48 2000 Carlos O'Ryan <coryan@uci.edu>
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/CosEvent/CEC_Dispatching_Task.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/CosEvent/CEC_Dispatching_Task.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/CosEvent/CEC_Dispatching_Task.cpp b/TAO/orbsvcs/orbsvcs/CosEvent/CEC_Dispatching_Task.cpp
new file mode 100644
index 00000000000..210e3a91126
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/CosEvent/CEC_Dispatching_Task.cpp
@@ -0,0 +1,108 @@
+// $Id$
+
+#include "CEC_Dispatching_Task.h"
+#include "CEC_ProxyPushSupplier.h"
+
+#if ! defined (__ACE_INLINE__)
+#include "CEC_Dispatching_Task.i"
+#endif /* __ACE_INLINE__ */
+
+ACE_RCSID(CosEvent, CEC_Dispatching, "$Id$")
+
+int
+TAO_CEC_Dispatching_Task::svc (void)
+{
+ int done = 0;
+ while (!done)
+ {
+ ACE_TRY_NEW_ENV
+ {
+ ACE_Message_Block *mb;
+ if (this->getq (mb) == -1)
+ if (ACE_OS::last_error () == ESHUTDOWN)
+ return 0;
+ else
+ ACE_ERROR ((LM_ERROR,
+ "EC (%P|%t) getq error in Dispatching Queue\n"));
+
+ TAO_CEC_Dispatch_Command *command =
+ ACE_dynamic_cast(TAO_CEC_Dispatch_Command*, mb);
+
+ if (command == 0)
+ {
+ ACE_Message_Block::release (mb);
+ continue;
+ }
+
+ int result = command->execute (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ ACE_Message_Block::release (mb);
+
+ if (result == -1)
+ done = 1;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "EC (%P|%t) exception in dispatching queue");
+ }
+ ACE_ENDTRY;
+ }
+ return 0;
+}
+
+void
+TAO_CEC_Dispatching_Task::push (TAO_CEC_ProxyPushSupplier *proxy,
+ CORBA::Any& event,
+ CORBA::Environment &ACE_TRY_ENV)
+{
+ if (this->allocator_ == 0)
+ this->allocator_ = ACE_Allocator::instance ();
+
+ void* buf = this->allocator_->malloc (sizeof (TAO_CEC_Push_Command));
+
+ if (buf == 0)
+ ACE_THROW (CORBA::NO_MEMORY (TAO_DEFAULT_MINOR_CODE,
+ CORBA::COMPLETED_NO));
+
+ ACE_Message_Block *mb =
+ new (buf) TAO_CEC_Push_Command (proxy,
+ event,
+ this->data_block_.duplicate (),
+ this->allocator_);
+ this->putq (mb);
+}
+
+// ****************************************************************
+
+TAO_CEC_Dispatch_Command::~TAO_CEC_Dispatch_Command (void)
+{
+}
+
+// ****************************************************************
+
+int
+TAO_CEC_Shutdown_Task_Command::execute (CORBA::Environment&)
+{
+ return -1;
+}
+
+// ****************************************************************
+
+int
+TAO_CEC_Push_Command::execute (CORBA::Environment& ACE_TRY_ENV)
+{
+ this->proxy_->push_to_consumer (this->event_, ACE_TRY_ENV);
+ return 0;
+}
+
+#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
+
+// @@ template class ACE_Locked_Data_Block<ACE_Lock_Adapter<ACE_SYNCH_MUTEX> >;
+
+#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
+
+// @@ #pragma instantiate ACE_Locked_Data_Block<ACE_Lock_Adapter<ACE_SYNCH_MUTEX> >
+
+#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */