diff options
author | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-02-12 21:52:37 +0000 |
---|---|---|
committer | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-02-12 21:52:37 +0000 |
commit | 02e85d62350ef16eddb97071a0e834bd973204d7 (patch) | |
tree | 3c710175f73f195dac276bcab90ff6e98c52686a /TAO/orbsvcs/orbsvcs/CosEvent/CEC_Dispatching_Task.cpp | |
parent | c5f9d9720aa2bdf7e356d9cec96e16b121972587 (diff) | |
download | ATCD-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.cpp | 108 |
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 */ |