diff options
Diffstat (limited to 'trunk/TAO/tests/AMI_Timeouts/timeout_i.cpp')
-rw-r--r-- | trunk/TAO/tests/AMI_Timeouts/timeout_i.cpp | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/trunk/TAO/tests/AMI_Timeouts/timeout_i.cpp b/trunk/TAO/tests/AMI_Timeouts/timeout_i.cpp new file mode 100644 index 00000000000..ff9fab96bd8 --- /dev/null +++ b/trunk/TAO/tests/AMI_Timeouts/timeout_i.cpp @@ -0,0 +1,146 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// TAO/tests/AMI_Timeouts +// +// = FILENAME +// server.cpp +// +// = DESCRIPTION +// Implements the timeout CORBA Object and its reply handler. +// +// = AUTHOR +// Michael Kircher <Michael.Kircher@mchp.siemens.de> +// +// ============================================================================ + +#include "timeout_i.h" +#include "ace/OS_NS_unistd.h" + +Timeout_i::Timeout_i (CORBA::ORB_ptr orb) +{ + orb_ = CORBA::ORB::_duplicate (orb); +} + +Timeout_i::~Timeout_i () +{ +} + +void +Timeout_i::sendTimeToWait (CORBA::Long msec + ACE_ENV_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + //ACE_DEBUG ((LM_DEBUG, + // "Timeout_i::sendTimeToWait: invoked with msec = %d\n\n", + // msec)); + + if (msec != 0) + { + // ACE_DEBUG ((LM_DEBUG, + // "Timeout_i::sendTimeToWait: sleeping\n\n")); + + ACE_Time_Value tv (0, msec * 1000); + ACE_OS::sleep (tv); + } +} + +void +Timeout_i::shutdown (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + orb_->shutdown (); + //ACE_DEBUG ((LM_DEBUG, + // "Timeout_i::shutdown: shut down ORB\n\n")); +} + +// Reply Handler implementation + +TimeoutHandler_i::TimeoutHandler_i () +: reply_counter_ (0) +, reply_excep_counter_ (0) +{ + timer_.reset (); + timer_.start (); + timer_.stop (); +} + +TimeoutHandler_i::~TimeoutHandler_i () +{ +} + +void +TimeoutHandler_i::sendTimeToWait (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ACE_DEBUG ((LM_DEBUG, + "reply")); + reply_counter_++; + timer_.stop (); +} + +void +TimeoutHandler_i::sendTimeToWait_excep (::Messaging::ExceptionHolder *excep_holder + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + timer_.stop (); + + ACE_TRY + { + excep_holder->raise_exception (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCH (CORBA::TIMEOUT, timeout) + { + ACE_DEBUG ((LM_DEBUG, + "timeout")); + reply_excep_counter_++; + } + ACE_CATCHALL + { + ACE_DEBUG ((LM_DEBUG, + "Error: Unexpected exception")); + } + ACE_ENDTRY; +} + +void +TimeoutHandler_i::reset_reply_counter () +{ + reply_counter_ = 0; +} + +void +TimeoutHandler_i::reset_reply_excep_counter () +{ + reply_excep_counter_ = 0; +} + +unsigned short +TimeoutHandler_i::reply_counter () +{ + return reply_counter_; +} + +unsigned short +TimeoutHandler_i::reply_excep_counter () +{ + return reply_excep_counter_; +} + +void +TimeoutHandler_i::start () +{ + timer_.reset (); + timer_.start (); +} + +ACE_Time_Value & +TimeoutHandler_i::elapsed_time () +{ + timer_.elapsed_time (elapsed_time_); + return elapsed_time_; +} |